0

私はいくつかの 2D 剛体 (ポリゴン) 物理学を実行したいと考えており、衝突応答を計算するための精巧な方程式を見つけました。しかし、その前に、その応答手順への「入力」を見つける良い方法が必要です。

そのような入力は、衝突ポイントの座標と、この時点での衝突エッジの法線である必要があると思います。衝突検出を行うアルゴリズムは多数あります。たとえば、ポリゴン A の頂点がポリゴン B の内側にあるかどうかをテストできますが、エッジの法線は得られません。次に、おそらくループでエッジの交差をテストできますが、これが最も簡単な方法ですか、それとももっと簡単な方法がありますか?

4

1 に答える 1

0

Normal to the edgeに依存しますpolygon only。衝突データではありません。

プログラムでポリゴンがどのように定義されているかによって、そこから法線を取得できます。

頂点の配列によって定義されているとします。

エッジは 2 つの連続する点を取り、直線 (エッジ) を定義します。したがって、エッジのベクトルは次のようになります。

EdgeVectorX = SecondPointX - FirstPointX
EdgeVectorY = SecondPointY - FirstPointY

これに対する通常のベターは、X を Y に変更し、そのうちの 1 つを負にします。

NormalX = -EdgeVectorY
NormalY =  EdgeVectorX

長さ 1 のベクトルにするには、NormalX と NormalY の両方をベクトルの長さで割ります。

Length = SquareRoot(NormalX*NormalX + NormalY*NormalY)

頂点がポリゴンの内側にあるかどうかのチェックについては、内側に他の頂点がないかどうかを必ずテストしてください。複数のポイントの場合、単一の頂点衝突の正確な瞬間を見つけるために、実際の位置を前の位置で補間する必要があります。(唯一の例外は、エッジからエッジへの平行衝突の幸運なケースです)。使用している時間ステップが大きいほど、ミスが大きくなります。

ばかげた間違いは、衝突が検出されずにポリゴンが互いに通過するのに十分な時間ステップが大きい場合です。

于 2013-05-05T04:27:36.160 に答える