如何检测由n个线段包围的所有区域?

时间:2016-02-17 12:34:18

标签: math geometry triangular

在二维平面中绘制3个线段时,它可能构成一个三角形。

如何找到由n个线段生成的所有多边形?我可以使用任何有效的算法吗?

输入:每个线段的第一个和最后一个点坐标(例如,点A =(x_A,y_A),B =(x_B,y_B),...,I =(x_I,y_I))

lines

输出:所有生成的多边形和生产线集(例如{A,B,C,F},{A,C,E,F,H},{E,F,I},{E,F, I,H},{G,H,I})

polygons produced by given lines

1 个答案:

答案 0 :(得分:1)

我找到了答案。

步骤1.计算每个线段的所有交叉点。

参考" How do you detect where two line segments intersect?",计算给定线段的所有交叉点。它是O(n ^ 2),但可以使用空间树(例如R-Tree,Quad tree)升级到O(n log n)。

enter image description here

步骤2.找到所有顺时针循环。

参考" small cycle finding in a planar graph",计算每个顶点的连接边角,并对其进行排序。完成之后,遍历每一条边并找到所有的循环,然后转到最左边的边缘"策略。

这将找到所有循环,但也会找到不需要的外循环。与其他所有逆时针循环相比,外循环是顺时针方向,因此请使用" How to determine if a list of polygon points are in clockwise order?"中写入的方法移除顺时针循环。

enter image description here