确定双连接边列表(DCEL)的面的子集是否形成简单连接区域

时间:2013-08-15 07:32:25

标签: graph-theory computational-geometry

我正在尝试使我的增量凸包算法的玩具实现更加稳健,并且在某些退化情况下,有许多几乎共面的点,可见区域包含“洞”。

有没有办法检查标记为可见的面是否形成一个简单连接的区域?

考虑到某个起点,我正在考虑某种BFS,但我无法理解它。

1 个答案:

答案 0 :(得分:1)

我假设您有简单的方法来遍历网格。如果没有,那么另一种算法可能更合适。

保留一组边界边缘索引。

  • 遍历选择中的每个面孔。
  • 对于每张脸,请看它的所有边缘。
  • 如果边缘另一侧的脸部也是选定的脸部,则继续到脸部的下一个边缘。
  • 否则,边缘是边缘
    • 沿着边界填充边界边缘。这将形成一个完整的循环,或离开网格的边缘。
    • 如果它离开网格的边缘,那么你需要继续沿着网格的边界进行搜索,直到你到达选区边界的边缘,并在那里跟进,直到你能够形成一个完整的循环。
    • 将该循环添加到边框边缘集以便快速查找。

当您继续遍历所有面的边缘以查找边界边缘时,请检查每个边缘边缘与第一个循环中获得的边界边缘集。如果新边框边缘不在边框边缘集中,则它会形成第二个循环,这意味着您的选择不紧凑。