それぞれがポイントのリストとして表される多数のポリゴンがあります。ポリゴンのリストを調べて、交差したエッジがなくなるまですべての交差したエッジを交差解除する高速アルゴリズムを探しています。
現在のバージョンの疑似コード:
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) があります。赤い線は、交差していない 2 つのエッジを示しています。結果は常に一連の平面グラフである必要がありますが、有効な結果が複数あるのか、1 つだけなのかは不明です。
編集:今回は、最初に線を追加してから点を追加し、もう少し複雑な形状を使用しました。ポイントが固定されているふりをします。