CGAL安排:曲面中的面孔

时间:2014-08-27 08:49:17

标签: c++ computational-geometry cgal

使用CGAL的2D Arrangements包,在聚合插入大量封闭的,可能相交的曲线后,是否可以快速识别给定闭合曲线内部的哪些面?

1 个答案:

答案 0 :(得分:0)

首先需要每个面都有一个布尔值才能知道它是否已被标记(这可以是扩展的面部类型,也可以只是std::set)。 您还需要一个面部队列来处理。

然后从无界面开始并将其标记为已访问。 对于每个洞,取相反的半边(跟踪你在曲线内对应于半边的事实),将面标记为已访问并将其添加到队列中。

对于队列中的每个面,对于其外边界的每个半边,取相反的半边。如果相应的面尚未标记,则标记它并考虑交叉边缘。将该面添加到队列中。当你完成外边界时,你可以考虑每个孔的一半。

当队列为空时,你就完成了。

请注意,包含当前面的曲线需要使用包含它的面的曲线。因此,我建议每个面部存储一个半边的队列(这样您可以直接访问已经处理过的包含面)。