我有许多多边形,每个多边形都表示为一个点列表。我正在寻找一种快速算法来遍历多边形列表并取消所有交叉边,直到没有交叉边为止。
当前版本的伪代码:
While True:
For each pair of polygons:
for edge1 in first_polygon:
for edge2 in second_polygon:
if edges_cross(edge1,edge2): # Uses a line segment intersection test
uncross_edges(first_polygon,second_polygon,edge1,edge2)
If no edges have been uncrossed:
break
这可以通过用递归替换 while 循环来改进。但是,它在性能方面仍然很差。
下面是解开*的简单示例。实际上会有大量的多边形和每个多边形的相当数量的点(大约 10-500)。红线显示哪些两条边未被交叉。结果应该始终是一系列平面图,尽管不确定是否有多个有效结果或只有一个。
编辑:这次我先添加线条,然后添加点,并使用更复杂的形状。假装点是固定的。