线条图类似于图形,但其顶点具有x,y位置。没有交叉边缘。例如,a line drawing like this是一个线条图,其中13个顶点编号为0-12。面是一个没有“内部”路径的循环。该示例中的面孔将是
(0,1,3,2,0), (2,3,5,4,2), (4,5,8,7,4), (7,8,12,11,7) and (0,2,4,7,11,10,9,6,0)
周期(0,1,3,5,4,2,0)
不是面孔,因为有一个位于其中的路径,名为(2,3)
。周期(0,1,3,5,8,12,11,10,9,6,0)
也不是一张脸,因为它里面有一条路径(0,2,4,7,11)。我可以使用什么算法来识别像示例中的面孔?
答案 0 :(得分:0)
假设所有边都是线段;可以仅使用线段绘制每个平面图。还假设图表已连接。现在算法非常简单:
构造一个有向图,使得顶点与原始图中的相同,并且每个原始边有两个有向边,每个方向一个
从尚未使用的随机(定向)边开始。最后,顺时针选择下一个输出边缘(或逆时针也可以,也一样)。要确定哪个边缘,您必须从平面嵌入中的顶点坐标计算。您最好事先为每个顶点预先计算此边缘顺序。
在选定边的末尾继续这样做,直到到达起始顶点。那时,你已经完成了一张脸。
当没有未使用的边时,您已在图中找到所有面
或者,使用像Boost这样具有efficient implementation此类任务的库