2009年8月2日日曜日

物理 #2 衝突(2次元)

今回は,2次元の衝突です.

球A:
位置:r1=(x1, y1)T
衝突前速度:v1=(v1x, v1y)T
衝突後速度:v1'=(v1x', v1y')T
質量:m1
反発係数:e1

球B:
位置:r2=(x2, y2)T
衝突前速度:v2=(v2x, v2y)T
衝突後速度:v2'=(v2x', v2y')T
質量:m2
反発係数:e2

表記の都合上,半径:rは省略します.
また,
v=(vx, vy)T=vxe1+vye2
とします.
e1, e2はそれぞれ,正規直交基底で,
e1=(1, 0)T, e2=(0, 1)T
です.

さて,この2つの球が衝突したとしましょう.どうなるでしょうか?
1次元の場合は,簡単に考える事が出来ましたが,2次元となると一筋縄ではいきません.
以下をご覧あれ.


Fig.1 Collision

衝突した瞬間の図です.ここで,
r=r2-r1
というベクトルをとったとしましょう.そして,rに垂直(=球2つの接線)なベクトルをとります.
この2つのベクトルを正規化したものをそれぞれ,
e1'=(e1x', e1y')T
e2'=(e2x', e2y')T
と表すことにします.
この時,e1', e2'は正規直交基底となります.
この基底上で考えると,e1'では,1次元空間の単純な衝突,e2'上では,速度の変動は全く無い,という事が出来ます.

というわけで,v1, v2を先の基底で表してみましょう.

v1=w1xe1'+w1ye2'
v2=w2xe1'+w2ye2'
とします.このときwは,以下の様に計算します.

w1x=v1e1'
w1y=v1e2'
w2x=v2e1'
w2y=v2e2'

wに関して衝突後の値をw'で表します.この時,
w1y', w2y'
は,衝突前に等しいので(前述),
w1x', w2x'
を求めればよいのです.

とはいえ,これは,1次元ヴァージョンの帰結に相違無いので,

w1x'=(m1w1x+m2w2x)/(m1+m2)+e(w2x-w1x)m2/(m1+m2)
w1y'=w1y
w2x'=(m1w1x+m2w2x)/(m1+m2)+e(w1x-w2x)m1/(m1+m2)
w2y'=w2y

となります.
あとは,元の基底で表すだけです.そのためには,
v1'=w1x'e1'+w1y'e2'
に,そのまま代入すればよいので,
v1x'=w1x'e1x'+w1y'e2x'
v1y'=w1x'e1y'+w1y'e2y'
v2x'=w2x'e1x'+w2y'e2x'
v2y'=w2x'e1y'+w2y'e2y'

というわけで,求める事が出来ました.

実際にシミュレーションしてみると,当たり前の動きをするのですが,感動を覚えます.

0 件のコメント: