C#で分離軸の定理を実装しようとしています。2つのポリゴン間の最小並進ベクトルを計算できる関数があります。ただし、1つのポリゴンと他の複数のポリゴンの間の最小並進ベクトルを計算する関数を作成できないようです。正直なところ、私は何ヶ月もこれに取り組んできましたが、解決策に近づいておらず、オンラインで解決策を見つけることができませんでした。常に正しい結果を返さないエッジケースがいくつかあり、私のゲームで優先度の高いバグが発生します。
以下は、正常に機能しない一般的なエッジケースです。
この問題のよく知られた解決策はありますか?私が見つけることができるのは、「各ポリゴンでSATを実行するだけ」と言っている人たちだけですが、これが最小の並進ベクトルを生成することはめったにありません。
任意の助けをいただければ幸いです。
私が実際にテストに回ったことがないという1つのアイデアは、いくつかの分離軸(隣接するポリゴンに横に移動する軸)にフラグが付けられ、最小値と見なされないようにすることです。次に、ある種の繰り返しテストで良い結果が得られます(おそらく、ある種のFIFOやループがスタックするのを防ぐための反復制限がある場合)。
—
Andrew Russell、
これを解決するのがさらに難しいのは、形状のエッジが他の部分で部分的にしか覆われていない場合です。たとえば、右上の画像で、真ん中の正方形が右側に伸びている場合、より大きな長方形になります。これは、私が使用するいくつかのコードの出力に似ています。これは、数万の占有/非占有セルを取り、それを100より大きい衝突形状の下に削減します
—
Richard Tingle