円と凹面多角形が交差するかどうかをテストするにはどうすればよいですか?


19

多角形(時には凸面ですが、しばしば凹面)と、異なる半径の円の束があります。円が多角形と交差/重複しているかどうかを確認するにはどうすればよいですか?

凹型ポリゴンを凸型ピースに分割できます。それは役立ちますか?

回答:


26

この問題には2つのケースがあります。1つ目は交差点で、2つ目はオーバーラップ(包含)です。

最初(円内の交差点/ポリゴン):

多角形のすべてのエッジで円の中心に最も近い点を見つけます。中心に最も近いポイント間の距離が半径よりも小さい場合、交差またはオーバーラップが発生しています。

2番目(円はポリゴン全体): 円の中心から右(または左/上/下)に光線を発射し、光線/セグメント(ポリゴンエッジ)の交差をカウントします。交差カウントが偶数の場合、円はポリゴンの外側にあります。奇数の円が内側にある場合。

この場合のレクチューの写真を共有します。

ここに画像の説明を入力してください

そして、特異なケースの世話をします。

これが役立つことを願っています。


編集:写真にクレジットを追加するのは公正だと思います。著者は、プラハのチェコ工科大学の助教授であるペトル・フェルケルです


光線を右に「発射」するだけではうまくいかないと思います。:たぶん私はあなたのアプローチを読み違えが、私はここに描かれているように、それはセットアップに失敗していまし理解何からimgur.com/Whg2uは
bummzack

2
はい。ただし、これは最初のケースで説明されています。射線は、円を含むポリゴンのみを解決します(私の説明では2番目のケース)。両方のケースをテストする必要があります。高速で実装が簡単で、メモリを必要としません。
ノタベン

1
「エッジ」と「頂点」を混同したため、最初のチェックを誤って解釈してしまい申し訳ありません。正しく読むと、動作します:)
bummzack

7

最初のステップは、ご想像のとおり、凹多角形を複数の凸多角形に分割することです。これは、分離軸定理を使用するためです。これは、凸多角形でのみ機能します。

SAT自体は、2つの凸ポリゴンでのみ機能します。名前の「分離軸」は、ポリゴンのエッジに垂直な軸を指します。残念ながら、サークルにはこれらの無限の数があります。ただし、これらの軸のどれが関連しているのかを見つける簡単な方法があります。これは、ポリゴンの頂点と交差するように外側に突き出ているものを見るとわかります。

むしろ、ここでアルゴリズム全体にわたり行くよりも、Metanetソフトウェア(N / N +のメーカーは)持っているSAT使用して衝突検出の良いチュートリアルオブジェクトの一つが円の場合にSATを覆うの3番目のセクションを


凹面ポリゴンを凸面ポリゴンに分割するためのリファレンスはありますか?あなたが提供したSATリンクは、この種のことについて何も言及していません。
エサヌル

これは実際にはポリゴンのジオメトリに依存する非常に複雑な問題ですが、ハードウェアは一般にポリゴンではなく同一平面上の四角形と三角形しかレンダリングできないため、すべての3Dエンジンがこれを行います。
SplinterReality

1
@ehsanul:en.wikipedia.org/wiki/Polygon_triangulationは、いくつかの一般的なアプローチについて説明しています。

0

これが私がやることです。

  1. 水平線テストを使用して、円の中心が多角形の内側にあるかどうかを検出します。そうであれば、それらは交差します。
  2. そうでない場合は、次のケースを確認してください。多角形の各辺について
    1. 多角形の側面の勾配を見つける
    2. 垂直勾配を計算する
    3. (これをよく読んでください)辺を作る頂点と交差する多角形の辺の勾配を持つ線と、円の中心と交差する辺の辺に垂直な勾配の線との交差を見つけます。
    4. 確立された交差点が円の内側にある場合、これは、ある点であなたの円が問題の辺を越え、したがって多角形と交差していることを意味します
  3. 最後に、他に決定的なものがない場合は、ポリゴンの頂点が円の内側にあるかどうかを確認します(以前のテストのため、一度だけ確認する必要があります)。そうであれば、それらは交差します。そうでない場合、最終的にそうではないと言うことができます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.