作成中の2Dゲームに衝突システムを実装しようとしています。分離軸定理(metanetのコリジョンチュートリアルで説明されている)は、衝突検出を処理する効率的で堅牢な方法のように見えますが、私は彼らが使用するコリジョンレスポンスメソッドがあまり好きではありません。オーバーラップが最小の軸に沿って盲目的に移動することにより、アルゴリズムは移動するオブジェクトの前の位置を単純に無視します。つまり、静止オブジェクトに進入して跳ね返るまで静止オブジェクトと衝突しません。
これが重要な状況の例を次に示します。

上記のSATメソッドによれば、長方形は斜辺に垂直な三角形から単純に飛び出します。

ただし、現実的には、長方形は三角形の右下隅で停止する必要があります。これは、変位ベクトルに沿って連続して移動している場合の最初の衝突点になるためです。

さて、これは実際にゲームプレイ中は重要ではないかもしれませんが、この方法で正確かつ一般的に正確な変位を達成する方法があるかどうかを知りたいです。私は過去数日間、頭を悩ませてきましたが、まだあきらめたくありません!
(StackOverflowからクロスポストされ、ルールに反しないことを願っています!)
ステップ1:各ポリゴンについて、モーションベクトルに垂直なラインへのそのポリゴンの投影に沿った2つの最も遠いポイントを見つけます。
ステップ2:これらのポイントを結ぶ線に沿って各ポリゴンを分割します。モーションベクトルに沿って他のポリゴンに面するポリゴンの半分が「前方船体」です。これは、衝突する可能性があるポリゴンの唯一の部分です。
ステップ3:各ポリゴンの「前方船体」の各ポイントから反対側のポリゴンに向かってベクトルを投影し、反対側のポリゴンの「前方船体」の各エッジとの交差をチェックします。(?おそらく遅いが、コンピュータは、最近かなり速いです-右)(。。申し訳ありませんが、傾斜矢印についてのすべての矢印は、平行でなければなりません)
。ステップ4:最短ベクトルを取ります。これは正確な衝突距離です。
ステップ5:出来上がり!
