これは些細なことのように思えますが (さまざまなフォーラムでよく質問されます)、より複雑なアルゴリズムの構成要素としてこれが絶対に必要です。
入力: 2D の 2 つのポリゴン (A と B) [(x0, y0, x1, y2), ...]
。それぞれエッジのリストとして指定されます。ポイントは のペアで表されdouble
ます。それらが時計回り、反時計回り、または任意の方向に与えられているかどうかはわかりません。それらが必ずしも凸状ではないことは知っています。
出力: A、B、および交差するポリゴン AB を表す 3 つのポリゴン。どちらも空の (?) ポリゴンである可能性がありますnull
。
最適化のヒント: これらのポリゴンは、部屋とフロアの境界を表します。そのため、部屋の境界は通常、同じ平面上の別のフロアに属していない限り、フロアの境界と完全に交差します (おっと!)。
この問題についてこれまでに発見したことはかなり困難であるため、誰かがすでにこれをC#で行っており、彼らの戦略/コードを使用できるようにしてくれることを願っています。
編集:だから、私はこれを行う見込みで気絶するのは完全にチキンではないようです. これは特殊なケースであり、計算が簡単になる可能性があるため、ここで目的の出力をもう一度述べたいと思います。
出力: 最初のポリゴンからすべての交差ビットを差し引いたもの、交差ポリゴン (複数可)。2 番目のポリゴンにはあまり関心がありません。最初のポリゴンとの交差だけです。
EDIT2:私は現在、これを本当に簡単にするGPC(General Polygon Clipper)ライブラリを使用しています!