アプリ版:「スタンプのみでお礼する」機能のリリースについて

三体同時衝突はどう解いたらいいのでしょうか?
撃力ベースで質量・大きさが同じ正方形の弾性衝突の2Dシミュレーションをしていて、
物体 X の速度を vX、物体 X に対する撃力を fX と書くとして
物体 A と B で衝突が起こったら
fA += vB-vA, fB += vA-vB
という撃力が発生するように実装しました。

ここで、止まっている中央の物体 C に、左右から同じ速度 v で他の2体 L, R が衝突する
状況をシミュレーションすると、
fL = +v
fC = +v-v = 0
fR = -v
となり、撃力適用後の速度は、
vL = 0
vC = 0
vR = 0
となって固まってしまいます。
vL = +v
vC = 0
vR = -v
というのが解だと思うのですが、これを得るにはどう取り扱ったらいいのでしょうか?

そもそも3体が同時に衝突することは確率的にあり得ず、2体同士の3回の衝突に分けて計算する、
というのが一般的な打開案ですが、今回は位置・速度の演算を有理数形式で管理し、
厳密なシミュレーションをするとどうなるか、ということを念頭を置いているので、
衝突時刻の誤差を期待できません。

cf.
検索すると、三体衝突問題は数学的に解けないことが証明されている、と書いてあるページがちらほらみつかりました。
関係があるかもしれません。
(注:3天体の万有引力相互作用がカオス系になる、
 というのはまた別で、ここではあくまで三体の同時衝突の問題です。
 根は同じかも知れませんが)
よろしくお願いします。

A 回答 (2件)

お使いの撃力の式は2体衝突には有効でも、三体衝突には適さないものですね。

3体衝突では、L / R には C だけでなく、R / L からの撃力も間接的に(圧縮波を通じて)作用しますが、これが取り入れられていません。そのために L と R が止まってしまうわけです。2体衝突と3体衝突の両方に使えるような撃力の式が見つかればよいですが、見つからなければ、2体の場合と3体の場合を分けて扱う必要があるでしょう。

その際、跳ね返り係数を使う方法を検討されたらどうでしょう。
例えば、跳ね返り係数が 1 である場合、質量が同じ2物体の衝突では速度が交換されます。
3物体の場合には、衝突後の速度を「’」を付けて表すと、
vL' - vC' = vC - VL
vR' - vC' = vC - vR
vL' + vC' + vR' = vL + vC + vR (運動量保存)
より
vL' = (-vL + 2vC + 2vR) / 3
vC' = (2vL - vC + 2vR) / 3
vR' = (2vL + 2vC - vR) / 3
が得られます。例えば
vL = v
vC = 0
vR = -v
に対しては
vL' = -v
vC' = 0
vR' = v
で、望みの結果となります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
vL' - vC' = vC - VL (作用反作用の法則)
vR' - vC' = vC - vR (作用反作用の法則)
vL' + vC' + vR' = vL + vC + vR (運動量保存)
これで目が覚めました。
二体衝突も元はこの式から導出しているのだから、
変数が増えるだけで式も増えてるから同じようにすればいいのですね。

お礼日時:2010/04/19 21:23

素人から見ると、動かないCは除いてしまい、AとBととの衝突と考えるのが適切に思えます。


また、エネルギーと運動量がともに保存される事を考えると、解ける様に思えるのですが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
後者が一般的な解法ですね。

お礼日時:2010/04/19 21:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!