ラベル Physics の投稿を表示しています。 すべての投稿を表示
ラベル Physics の投稿を表示しています。 すべての投稿を表示

2009年9月1日火曜日

物理 #3 衝突(3次元)

最終的には3次元.

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

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

重要なのは,正規直交基底の取り方ですが,
1つ目e1は,r2-r1を正規化したもの,
2つ目e2は,e1に垂直になるようにし,
3つ目e3は,e1e2に垂直となるようにします.

具体的には,

e1=(x, y, z)T
とします.次に
e2として,
(0, z, -y)T/|e2|
(y, -x, 0)T/|e2|
の内,計算可能なものを選びます.
そして,
e3=e1×e2
とします(“×”は外積).

このようにすると,
e1 - 1次元での衝突
e2 - 速度は不変
e3 - 速度は不変
となります.

あとは2次元の時と同様に

v1=w1xe1+w1ye2+w1ze3
v2=w2xe1+w2ye2+w2ze3

と表した時,

w1x=v1e1
w1y=v1e2
w1z=v1e3
w2x=v2e1
w2y=v2e2
w2z=v2e3

だから,

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

となり,

v1x'=w1x'e1x+w1y'e2x+w1z'e3x
v1y'=w1x'e1y+w1y'e2y+w1z'e3y
v1z'=w1x'e1z+w1y'e2z+w1z'e3z
v2x'=w2x'e1x+w2y'e2x+w2z'e3x
v2y'=w2x'e1y+w2y'e2y+w2z'e3y
v2z'=w2x'e1z+w2y'e2z+w2z'e3z

衝突条件は勿論,

(x2-x1)2+(y2-y1)2+(z2-z1)2≦(r1+r2)2

(rはそれぞれの球の半径です)

これで終わりです.4次元,5次元と拡張する場合は,基底の取り方に注意すれば後は同じです.



シミューレーションすると,これもまた感動です.

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'

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

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

2009年7月4日土曜日

物理 #1 衝突

2つの物体が衝突と如何なるでしょう.

1.古典物理学に従って,その後の運動が決まる.
2.陽子崩壊
3.宇宙ヤバイ

今回は,1.の様になる事を期待します.
2つの物体を球A,Bとします.球A,Bはそれぞれ,

球A:
位置:x1
衝突前速度:v1
衝突後速度:v1'
質量:m1
半径:r1
反発係数:e1

球B:
位置:x2
衝突前速度:v2
衝突後速度:v2'
質量:m2
半径:r2
反発係数:e2

としましょう.未知数は衝突後速度v1',v2'のみです.これらを計算によって求めてみましょう.

※反発係数
反発係数というのは,2つの物体の衝突前後の相対速度の比のことで,
e=-(v2'-v1')/(v2-v1)
(0≦e≦1)
で与えられます.

まず,球Aと,球Bが衝突した時の相対速度の比は,常識的に申し上げて,
e=e1e2
となります.とすると,
v2'=v1'-e(v2-v1)
このように変形出来ます.

質量保存の法則
m1v1+m2v2=m1v1'+m2v2'
に,先程計算したv2'を代入すると,v2'が消え,未知数はv1'のみになります.

即ち,
v1'=(m1v1+m2v2)/(m1+m2)+e(v2-v1)m2/(m1+m2)
同様に,
v2'=(m1v1+m2v2)/(m1+m2)+e(v1-v2)m1/(m1+m2)

ということで,衝突後速度が求められました.

最後に衝突条件を.
|x2-x1|≦r1+r2

衝突した際に,双方の球がめり込んでいる,というような場合は,衝突条件から外れるまで双方に衝突後速度を加えるとよいです.

これを,2次元に拡張する事も出来ますが,それは次回以降…