小さく高速なオブジェクトの衝突:トンネリングの回避
編集/更新:私の今の最大の質問は、ステップ3の「t = ...」式が良いアイデアか、それを行うより良い方法かということです。他のほとんどの問題は部分的または完全に対処されていますが、この問題に関するコメントや回答はありません。繰り返しになりますが、分析ソリューションがおそらく必要であり、速度と距離が大きすぎ、オブジェクトが小さすぎるため、私が考えることができる反復/再帰ソリューション(コメントで以下にいくつかを提案します)この種の状況をうまく処理する特別な反復/再帰ソリューションであれば、私は間違いなくそれを受け入れます)。これまでのご協力に感謝します。皆さんはすばらしく、あなたの考えと助けに本当に感謝しています! 小さい高速オブジェクト間の衝突を検出しようとしています。これは、比較的低速であっても、トンネリングが非常に簡単に発生する可能性がある状況です。 レイキャスティングは機能しません。これは、1つのオブジェクトと静止した壁の間ではなく、2つの高速オブジェクト間の衝突を検出しているためです。(レイキャスティングを誤解していない限り?)パフォーマンスは非常に重要です。可能な限り、パフォーマンスの大幅な低下を避けたいと思います。機能的で非常に効果的なクアッドツリー(http://en.wikipedia.org/wiki/Quadtree)を既に実装しているので、以下に説明するように変更して使用します。 編集:時間間隔を短くしても機能しません。このソリューションには速度が高すぎます。つまり、トンネリング衝突の大部分を逃しながら、パフォーマンスヒットが大きすぎるということです。(たとえば、時間間隔ごとに数百万単位で測定される速度で移動する約1単位のサイズのオブジェクトがあるかもしれません...) 提案された解決策: ステップ1: 各オブジェクトの動きを囲むボックスを作成し、それらのボックスを四分木に入力して、衝突の可能性のある初期リストを生成します。次の画像を参照してください(この画像は、ある位置から別の位置に移動する円形オブジェクトと、四角形を生成する動きを示しています。四角形は四分木に供給されます)。 ステップ2:(このステップをスキップしたいですか?) 四分木によって生成される可能性のある衝突のリストを調べます。起こりうる各衝突で長方形が交差するかどうかを確認します。その場合は、手順3に進みます。 編集:以下、ショーン・ミドルディッチは、掃引ボリューム/カプセルの交差点の使用を提案しました(オブジェクトが円の場合)。次の3つのオプションがあります。1)ステップ2を完全にスキップします。2)自分のやり方でステップ2を行います。3)ショーンのやり方でやる。ショーンの方法は私のボックスのアイデアよりも計算コストが高くなりますが、私の方法よりも多くの誤検知を排除し、最終ステップに到達できないようにします。 これらの3つの選択肢のうち、どれが最良であるかについて、経験からだれでも話すことができますか?(この物理エンジンをいくつかの異なる目的に使用するつもりなので、どのソリューションを簡単に測定できる特定のテストケースだけでなく、さまざまな状況で最速で動作する「一般的に最高の」ソリューションを探しています最速です)。 ステップ3: 判別式(つまり、平方根の下の部分)が負または0、衝突なし、正の場合、t =式を使用し、衝突の時間としてt値を使用します(その後、それに応じて位置を簡単に調整できます)。 ..衝突後も両方のオブジェクトが存在し続ける場合)。方程式: t =(-1/2 sqrt((2 a w-2 a x + 2 b y-2 b z-2 c w + 2 c x-2 d y + 2 dz)^ 2-4(w ^ 2- 2 w x + x ^ …