在二维平面中绘制3个线段时,它可能构成一个三角形。
如何找到由n个线段生成的所有多边形?我可以使用任何有效的算法吗?
输入:每个线段的第一个和最后一个点坐标(例如,点A =(x_A,y_A),B =(x_B,y_B),...,I =(x_I,y_I))
输出:所有生成的多边形和生产线集(例如{A,B,C,F},{A,C,E,F,H},{E,F,I},{E,F, I,H},{G,H,I})
答案 0 :(得分:1)
我找到了答案。
步骤1.计算每个线段的所有交叉点。
参考" How do you detect where two line segments intersect?",计算给定线段的所有交叉点。它是O(n ^ 2),但可以使用空间树(例如R-Tree,Quad tree)升级到O(n log n)。
步骤2.找到所有顺时针循环。
参考" small cycle finding in a planar graph",计算每个顶点的连接边角,并对其进行排序。完成之后,遍历每一条边并找到所有的循环,然后转到最左边的边缘"策略。
这将找到所有循环,但也会找到不需要的外循环。与其他所有逆时针循环相比,外循环是顺时针方向,因此请使用" How to determine if a list of polygon points are in clockwise order?"中写入的方法移除顺时针循环。