N88-BASICで衝突 (3回目)
2023/11/18(土)
N88-BASICで衝突 (3回目)
(collision)
N88-BASICで衝突 (3回目)
(collision)
球と壁の衝突と跳ね返り
■ 前提
https://ulprojectmail.blogspot.com/2023/11/restitution.html
反発係数
より
▼ 定義
大文字(太字)はベクトル
右下添字は球番号
e :反発係数(衝突面に垂直)
u :減衰割合(衝突面に水平)
Pi:球の位置
mi:球の質量
Vi:球の速度
N :衝突面の法線
Ti:衝突面の接線
vi:衝突面に垂直方向の速度
ui:衝突面に水平方向の速度
' :衝突後
uは回転や摩擦力などを無視した挙動の近似
▼ ベクトル表記(V → V')
N = (P1 - P2)/|P1 - P2|
v1 = N・V1
v2 = N・V2
v1'= {m1v1 + m2v2 + em2(v2 - v1)}/(m1 + m2)
v2'= {m1v1 + m2v2 - em1(v2 - v1)}/(m1 + m2)
T1 = (V1 - v1N)/|V1 - v1N|
or (V2 - v2N)/|V2 - v2N| or 0
T2 = N × T1
u1k = Tk・V1
u2k = Tk・V2
u1k'= {m1u1k + m2u2k - um2(u2k - u1k)}/(m1 + m2)
u2k'= {m1u1k + m2u2k + um1(u2k - u1k)}/(m1 + m2)
衝突後の速度ベクトルは
V1'= u11'T1 + u12'T2 + v1'N
V2'= u21'T1 + u22'T2 + v2'N
▼ 外積
T2 = N × T1
(x', y', z') = (nx, ny, nz)×(x. y, z)と置くと
= (nyz - nzy, nzx - nxz, nxy - nyx)
(x', y') = (nx, ny)×(x. y) = (0, 0)
▼ 水平方向を1次元で近似する場合
u1 = |V1 - v1N|
u2 = |V2 - v2N|
T1 = (V1 - v1N)/u1 (if u1 ≠ 0), 0 (if u1 = 0)
T2 = (V2 - v2N)/u2 (if u2 ≠ 0), 0 (if u2 = 0)
u1k'= {m1u1k + m2u2k - um2(u2k - u1k)}/(m1 + m2)
u2k'= {m1u1k + m2u2k + um1(u2k - u1k)}/(m1 + m2)
V1'= u1'T1 + v1'N
V2'= u2'T2 + v2'N
▼ u = 1の場合
T1 = (V1 - v1N)
T2 = (V2 - v2N)
V1'= T1 + v1'N
V2'= T2 + v2'N
▼ 注意
実際は衝突時の水平方向の速度変化は
球の回転と摩擦力により変化するので
上記u < 1の時の式は現実では無意味な式と
なります
よって、通常はu = 1の式を使うのが
良いかと思います
▼ 運動方程式
位置ΔP = VΔt
■ 動作
N88-BASIC(86)(PC-98)用(coll003.bas )は、マウス
N88-BASIC(88)(PC-88)用(coll003x.bas)は、キーボード
球同士と壁の衝突と反発を表示
coll003?.basは
1050 PC98 = 1 '--- 1:PC-98 , 0:PC-88
が1 or 0の違いだけです
VL,NL,XL-BASICとblg~.zip(coll003?.bas)は
以下のリンクからダウンロードできます
https://ulprojectmail.blogspot.com
Readme.txtを読んで遊んで下さい