0

各頂点のポイントの配列を指定して、あるポリゴンが別のポリゴンの内側にあるかどうかを調べたいと思います。それを行う簡単な方法はありますか? 編集:内側の最小点が外側よりも大きく、外側の最大点が内側よりも小さいかどうかを確認するだけでは不十分です。十分条件ではありません。証拠: ここに画像の説明を入力

4

5 に答える 5

1

ポリゴン A の最小境界ボックスがポリゴン BI の境界ボックスの内側にあることを確認したら、A の各エッジが B のすべてのエッジと交差していないかどうかをチェックする必要があると思います。

これは単純なアプローチだと思いますが、より効率的な賢いアプローチが本当に必要なのではないかと思います。

于 2012-08-23T09:33:38.433 に答える
0
  1. ポリゴン1のあるポイントがポリゴン2の内側にあります

    ここでレイキャスティングを使用できます

  2. ポリゴン間にエッジとエッジの交差はありません

    エッジの数が多い場合、スペースパーティションツリーは速度を上げる可能性があります。エッジの数が少ない場合は、N*M列挙で問題ありません。

于 2012-08-23T15:15:09.160 に答える
0

Java2D、特に Area クラスを使用して、非常によく似たことを行いました。機能を複製したい場合は、そのクラスのコードを自由に入手できます。もっと簡単なオプションは、このライブラリを見ることかもしれません: http://www.cs.man.ac.uk/~toby/alan/software/それはあなたがやりたいことをしたり、とにかく出発点を与えたりすることを可能にするはずです。

于 2012-08-23T09:45:27.603 に答える
0

まず、軸に沿った境界ボックスを使用して、それらが互いに近くにあるかどうかを確認します。(基本的に、それぞれの周りに XY 整列ボックスを描画し、それらが交差しているかどうかを確認します。これは、ポリゴンの場合よりもはるかに簡単で、通常は多くの時間を節約できます。)

ボックスが交差する場合は、詳細な交差テストを実行する必要があります。「外側」のポリゴンの各辺に垂直な線を引き、両方の点からすべての点を線に投影します。次に、内側のポリゴンの結果のポイントが、外側のポリゴンから投影されたポイントの間にあることを確認します。

最初は例を視覚化するのが難しいことを理解しています。この分野に興味のある人には、衝突検出に関するこのチュートリアルをお勧めします。

http://www.wildbunny.co.uk/blog/2011/04/20/collision-detection-for-dummies/

ただし、前述のように、タスクはわずかに異なります。これは、各辺の垂直線に投影していて、すべての辺にセグメントを含める必要があるためです。また、これをたくさんやりたい場合は、射影と線形代数の概念について少し骨抜きにすることをお勧めします。

于 2012-08-24T05:38:35.947 に答える
-1

あなたの質問は不十分です-各頂点の座標を与えるだけでは、ポリゴンを指定するのに十分ではありません. 例: 正方形を描き、対角線を塗りつぶします。5 つの頂点は、正方形の角と対角線の交点です。これらの頂点から、4 つの異なるポリゴンを構築することができます。それぞれのポリゴンは、元の図面のエッジを使用して構築されますが、正方形から 1 つのエッジを削除し、対角線を制限します (これが十分に明確であることを願っています)。

編集:どうやらそれは十分に明確ではありませんでした。a1、a2、a3、a4 を正方形の 4 つの点に対応する頂点 (たとえば、左上から時計回り) とし、a5 を正方形の対角線の交点に対応する頂点とします。例として、上記の頂点に適合する 2 つのポリゴンを次に示します。これは右向きのパックマンのように見えるはずです。2. (a1、a2)、(a2、a3)、(a3、a4)、(a4、a5)、(a5、a1)。これは、左向きのパックマンのように見えるはずです。

于 2012-08-23T10:22:27.843 に答える