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