2

円形状と長方形形状の衝突を検出したいのですが、方法がわかりません。

次のピタゴラスの定理を使用して、円から円への衝突を検出する方法を知っています。

(x2 - x1)^2 + (y2 - y1)^2 - (r2 + r1)ですが、衝突を検出するための計算は何ですか

C または C++ プログラミング言語の円形状と長方形形状の間。

4

4 に答える 4

8

衝突検出では、最初に単純なオブジェクト間の衝突を検出してから、より複雑なオブジェクトに特化することが有益な場合がよくあります。これは、ブロード フェーズおよびナロー フェーズの衝突検出と呼ばれます。オブジェクトが衝突していないことを自明に証明できる場合、より単純なアルゴリズムを使用して最初に衝突を除外すると、プロセスが高速化されるという考え方です。

最初は、すべてのオブジェクトを、潜在的により複雑な真の形状を取り囲む円またはボックスとしてモデル化できます。これらのオブジェクトが衝突していることがわかった場合は、より複雑なアルゴリズムを使用して衝突をチェックできます。

すべての凸オブジェクトについて、2 つのオブジェクトが衝突していない場合、それらの間に平面を見つけることができることが知られています。これは、分離軸の定理として知られています。円と正方形の両方が凸面であるため、これを使用して、それらの間の衝突を検出するアルゴリズムを設計できます。

最初に、正方形の辺に平行な平面や円に接する平面など、単純な平面を検索できます。オブジェクトの 2 つの中心を結ぶ線上で円に接し、その後に円の中心と各コーナーを結ぶ線が続く平面を選択することをお勧めします。

分離面が見つかったら、オブジェクトが衝突することはなく、検索を停止できます。

お役に立てれば。

(このアプリケーションの非常に詳細な説明は、ここにあります: http://www.metanetsoftware.com/technique/tutorialA.html#section1 )

于 2013-04-05T11:58:25.303 に答える
3

円の中心が長方形の内側にある場合、または円の中心から長方形の境界線上の最も近い点までの距離が円の半径より小さい場合、円は長方形と交差します。四角形に対する円の中心の位置には、延長された辺に対する円の位置に応じて、9 つの可能性があります。

A|B|C
-+-+-
D|E|F
-+-+-
G|H|I

の場合E、明らかに円と長方形が交差しています。A, C, G, I最も近いコーナーまでの距離をテストする必要がある場合。残りのケースでは、円の中心から最も近いエッジまでの点線距離を使用します。

于 2013-04-05T11:59:56.843 に答える
1

解決策の 1 つは、長方形を 4 つの線分に変換し、それらの交点をテストすることです。

擬似コード:

for line in line-segments(rectangle)
   if line.end1 inside circle or line.end2 inside circle
       return true
   if line intersects circle
       return true
return false

これにより、次の 2 種類のテストが提供されます。

  1. 円の中の点 -- これは簡単で、円の中心からの距離です。
  2. 線分と円の交点 -- これはもう少し複雑です ()
于 2013-04-05T11:57:58.393 に答える
0

彼らが前に言ったように、あなたの長方形の形を線に分けてから、ここのアルゴリズムで各線を円と交差させます.

于 2013-04-05T12:26:24.553 に答える