3つのボールが同時に衝突したとします。衝突を解決する順序が最終結果に違いをもたらすことがわかりましたが、もちろん意味がありません。
説明して簡単にするために、1D の 3 つのボール、すべて同じ質量、弾性衝突を考えてみましょう。上の数字は速度、矢印は方向です。それらが現在すべて互いに接触していると仮定します。つまり、衝突しています。
-->2 -->1 <---3
O O O
A B C
これは、ボール A がボール B に後ろからぶつかり、ボール B と C が正面からぶつかっていることを示しています。
ここで、最初に B との衝突 A を解決し、次に C との衝突 B を解決するが、B の新しい速度を使用すると、代わりに B と C の衝突を解決し、次に A と B を解決した場合、同じ結果が得られるはずです ( B) の新しい速度を使用します。
しかし、そうではありません。
最初のケース: A と B、続いて B と C
A と B が与える
-->1 -->2
O O
A B
B と C を指定すると (ただし、元の速度 1 ではなく、上記の新しい B 速度 2 を使用)
<--3 -->2
O O
B C
したがって、最終結果は
-->1 <--3 ---->2
O O O
A B C
2 番目のケース: B と C、続いて A と B
B と C は
<--3 --->1
O O
B C
A with B (ただし、元の 1 ではなく、上記の 3 の B の新しい速度を使用)
<--3 -->2
O O
A B
したがって、最終結果は
<--3 -->2 ---->1
O O O
A B C
最終的な状態が異なることがわかります。
私は何を間違っていますか?さらに重要なことに、これを処理する正しい方法は何ですか?
多くのボールと壁との衝突のシミュレーションでは、このケースは非常に可能性があります。(たとえば、ボールが壁にぶつかり、同時に別のボールにぶつかると、上記と同じ問題が発生しますが、順序によって結果が異なります)。
現在、ループを使用してすべてのオブジェクトを反復処理し、一度に 2 つのオブジェクト間の衝突を解決しています。したがって、使用する順序は任意です (順序は、配列内のボールのインデックスにすぎません)。