Bounding Spheres は、おそらく多くの移動オブジェクトに役立ちます。オブジェクトの半径の二乗を計算し、その中心から追跡します。2 つのオブジェクトの中心間の距離の 2 乗が、2 つのオブジェクトの半径の 2 乗の和よりも小さい場合、衝突の可能性があります。すべては二乗距離で行われます。平方根はありません。
オブジェクト間の最小二乗距離で最近傍を並べ替えることができます。もちろん、衝突検出は複雑になる可能性があり、非球形のオブジェクトでは、境界球は必ずしも衝突情報を取得するわけではありませんが、衝突を比較する必要があるオブジェクトのツリーを非常にうまくプルーニングできます。
もちろん、オブジェクトの中心を追跡する必要があります。理想的には、境界球のサイズを再計算する必要がないように、各オブジェクトを固定する必要があります (ただし、再計算は特に難しいものではありません。非剛性ですが、複雑になります)。
基本的に、データ構造に関する質問に答えるために、すべてのオブジェクトをマスター配列に保持できます。デカルト座標に基づいてオブジェクトをすばやく並べ替えることができるマスター配列内のオブジェクトへの参照で構成される「領域」配列のセットがあります。「領域」配列には、マスター オブジェクト配列の最大オブジェクト半径の少なくとも 2 倍のオーバーラップが定義されている必要があります (それが可能であれば、オブジェクト境界球のスケーリングとオブジェクト数の問題が明らかに発生します)。
それができたら、領域内のすべてのオブジェクトの距離を互いに比較することにより、簡単な衝突テストを行うことができます。繰り返しますが、ここで領域の定義が重要になります。なぜなら、領域の数と比較の数との大きなトレードオフを行っているからです。ただし、距離の比較が単純な減算 (およびもちろん abs() 演算) に帰着するという理由だけで、少し単純になります。
もちろん、非球状オブジェクト間の実際の衝突検出を行う必要があり、それは自明ではない可能性がありますが、その時点で潜在的な比較の数を非常に劇的に減らしました。
基本的に、これは 2 層のシステムです。1 つ目は領域配列です。これにより、シーンを大まかに並べ替えることができます。次に、リージョン内の距離を比較します。ここでは、衝突したオブジェクトに対して基本的な衝突検出と衝突フラグを立てます。
この種のアルゴリズムには、動的領域決定でツリーを使用して領域サイズを均等にし、「混雑した」領域で領域サイズが急速に大きくなりすぎないようにする余地があるでしょう。ただし、そのようなことは自明ではありません。オブジェクトのサイズが異なると、密度の分類が... 控えめに言っても複雑になるためです。