2

2 つのボックス (ただし、凸多面体には適用されると思います) が交差するかどうかを判断するアルゴリズムを開発しようとしています。これを衝突検出に使用します。

各多面体の状態は、その重心の平行移動ベクトルと方向行列 (オブジェクト空間座標を表す 3x3 直交座標) として表されます。

私の一般的な考えは、2 つの多面体の各面を取得し、(多面体の向きと平行移動のコンポーネントを適用して) 平面方程式を計算し、他の多面体の各頂点を調べて、それらのすべてが正しいかどうかを判断することです。平面の同じ側にあり、そうであれば、2 つのオブジェクトが交差していないと判断します。

衝突検出部分については、交差するかどうかを検出し、交差する場合は、接触した瞬間をバイナリ検索し、その瞬間に最も近い他のオブジェクトの頂点を見つけることで衝突の頂点を見つけようとします接触点を決定するために先に見つけた平面。

私の質問は、このアルゴリズムが正しいかどうかです。正しい場合、やり過ぎですか? どういうわけかチェックを省略したり、プロセスをスピードアップしたりできますか?

4

1 に答える 1

1

あなたのアルゴリズムは正しく、あなたが得ようとしているのと同じくらい効率的だと思います。明確にするために、両方の多面体のすべての面をチェックする必要があります。他の多面体のすべての頂点が無限平面の「外側」にある場合は、交差しません

パフォーマンスの場合:

1 囲んでいる球を事前計算して、最初の「粗い」チェックを行うことができます

2 外向きの法線ベクトルをすべて事前計算し、それらを回転変換に使用します。一連の外積を実行するよりも安価なはずです。

交点の「点」を見つけることは、同じアルゴリズムを使用して実行でき、交差する状態と交差しない状態の間の線形補間を推定し、1 つの頂点が 1 つの平面上にある解を求めることができると思います。

于 2012-08-25T12:59:34.350 に答える