ここでSATをそのまま適用して、正方形の鍵を丸い穴に収めようとしているのではないかと思います。明らかに、これは凹面と凹面の衝突用に設計されたものではなく、その目的に適合させる努力を称賛しますが、これが機能しそうにない考慮事項があります。
リアリズム
角度の衝動とそのノックオン効果は、ここでのゲームの名前です。
接触点の順序は、現実的な衝突解決のために重要です。現実の世界では、これらのポイントの1つは常に他のポイントよりも先に攻撃されます。そして、その接触順序とそれによって表される各「サブコリジョン」の結果をエミュレートするだけで、シミュレーションで現実的な結果を得ることができます。これは、そもそも凹面を凸面に分解する理由の1つです。最初にどの部分が叩かれたかを区分的に検出できます。もちろん、これは「より少ないリアリズム」の見出しの下での私のコメントに従ってエミュレートすることもできます。
凸面フィクスチャを組み合わせて、オブジェクトの輪郭と重心の両方を与えます(もちろん、より複雑なシミュレーションでは、各フィクスチャが密度に異なる影響を与えることもあります)。これに言及する理由は、衝突を現実的に解決する際に、接触点の各「サブ衝突」に続いて、線形だけでなく角度インパルスも計算する必要があるためです。これは、SATで適用する基本的な「押しのける」ほど単純ではありません。
これにより、問題の性質が完全に変わります。これは、ご覧のとおり、2つ以上の接点を取得して使用しようとするのは無意味であるためです。その後、線形および角度インパルスに関して最初の問題を解決したら、各オブジェクトの方向が変更されるため、さらに衝突するために再計算する必要があります。それに加えて、ステップでの個々の接触の検出は、同じステップ内で行う必要がある場合とそうでない場合があります-オブジェクトの最初の接触点が接触するときの接触間のタイミングに応じて、後続の線形および角度インパルスが適用されます接触点のタッチなど。
リアリズムが少ない
もちろん、角度インパルスの解決にまったく関心がないと仮定すると、SATでできることは、これらのポリゴンをGraham's Scanのようなものを使用して凸面としてラップする場合、本質的に正確になります。ベクター。言い換えれば、あなたが実証したように、3つのベクトルを並行して解決しようとすることはほとんど意味がありません。それは重要な束の中で最大です。
あなたの質問に応じて編集
単純化したアプローチが必要な場合は、次のようにする必要があります。
変位の正しい方向を決定します。これは、それぞれを凸包にし、分離軸の法線を決定することで最も簡単に行えます。
次に、変位の大きさを決定する必要があります。なぜSATで与えられた大きさをそのまま使用できないのですか?考えてみると、凸包の相互侵入深さは、一致した凹包の場合よりも潜在的に大きくなるためです-歯が互いにある2つのEを考えてください!上記で行ったように、指定されたステップのすべての接触点を見つけますが、軸の法線に平行な接触点を見つけます。これが正しい変位方向であるためです。次に、これらの並列オーバーラップベクトルのどれが最も長いかを判断します。その1つで置き換え、残りを破棄し、次の物理ステップに進みます。