使用CGAL的2D Arrangements包,在聚合插入大量封闭的,可能相交的曲线后,是否可以快速识别给定闭合曲线内部的哪些面?
答案 0 :(得分:0)
首先需要每个面都有一个布尔值才能知道它是否已被标记(这可以是扩展的面部类型,也可以只是std::set
)。
您还需要一个面部队列来处理。
然后从无界面开始并将其标记为已访问。 对于每个洞,取相反的半边(跟踪你在曲线内对应于半边的事实),将面标记为已访问并将其添加到队列中。
对于队列中的每个面,对于其外边界的每个半边,取相反的半边。如果相应的面尚未标记,则标记它并考虑交叉边缘。将该面添加到队列中。当你完成外边界时,你可以考虑每个孔的一半。
当队列为空时,你就完成了。
请注意,包含当前面的曲线需要使用包含它的面的曲线。因此,我建议每个面部存储一个半边的队列(这样您可以直接访问已经处理过的包含面)。