N88-BASICで衝突 (3回目)

2023/11/18(土)
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 = NV1 
v2 = NV2 
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 = TkV1 
u2k = TkV2 
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を読んで遊んで下さい

 



このブログの人気の投稿

NEWS

N88-BASICでゲーム (1回目)