N88-BASICで万有引力

2021/11/17(水)
N88-BASICで万有引力
 
万有引力(Universal gravitation)を再現し
恒星、惑星、衛星を動かします
 
大文字ベクトル、小文字スカラー
 
位置   P1=(x1,y1,z1),P2=(x2,y2,z2)
質量   m1,m2 
加速度 A1,A2 
 
N:物体2に働く引力方向の単位ベクトル
R:P1-P2 
r:2点間の距離
k:比例定数(万有引力定数)
N = R/|R| 、 r = |R|
引力F = m2A2 = -m1A1 
引力F=k(m1+m2)N/(r2)
=k(m1+m2)R/(|R|3)
 
A1 = -k(m1+m2)R/(|R|3)/m1 
A2 =  k(m1+m2)R/(|R|3)/m2 
(k = 万有引力定数Gとすれば
万有引力による加速度になりますが
今回は適当な数値を使います)
 
加速度、速度、位置のベクトルを
A,V,Pとすると、
Pの微小増分dP,時間tの微小増分dt
dP = Vdt, dV = Adt
です。両辺dtで割ると、
dP/dt = VはPの時間微分です
dV/dt = AはVの時間微分です
 
ここからA = const.(一定)のとき
を考えます
dV/dt = Aの両辺をtで積分すると、
V = At + C (Cは積分定数)
t=0のときV=V0(初速度)と置くと
C = V0となる。同様に
dP/dt = V = At + V0を積分すると、
P = (1/2)At2 + V0t + C
t=0のときP=P0(初期位置)と置くと
C = P0となる
よって、
A = const.のとき、
V = V0 + At
P = P0 + V0t + (1/2)At2 
という、おなじみの式になります
t = 1(単位時間 = 1/60s など)
とすると、単位時間ごとに
P = P + V + A/2
V = V + A
を計算することになります
万有引力による加速度は一定では
ないのでこの式では誤差がでます
が、万有引力による正確な式を
求めるのは困難なので、
今回はこの式を使いました
 
P = P + V
V = V + A
のどちらが誤差が少ないか
わかりませんが、Δt(時間の増分)
を小さくすれば、どちらでも誤差は
少なくなります。
 
衝突やはねかえりなどは
https://ulprojectmail.blogspot.com/2021/08/n88-basic-1.html
N88-BASICでゲーム (1回目)
https://ulprojectmail.blogspot.com/2021/08/n88-basic-2.html
N88-BASICでゲーム (2回目)
を見て下さい
 
3つのボールが万有引力で公転
しています。"1"-"9"キーで
速度を変えられますが、処理速度
の遅いPCでは変えない方がよい
と思います
赤玉はカーソルとシフトキーで
動かせます
 
プログラムに不具合があって挙動が
変という可能性はありますが、
お遊び程度に鑑賞して下さい。
N88-BASIC,NL-BASIC用(univ001.bas)と
VL-BASIC用(univ001v.basレイトレーシング)
を用意しました
 
NL-BASICとVL-BASIC、blg~.zip(~.bas)は
このブログ(以下のリンク)から
ダウンロードできます

https://ulprojectmail.blogspot.com
Readme.txtを読んで遊んで下さい

N88-BASIC版



 






VL-BASIC(レイトレーシング)版





このブログの人気の投稿

NEWS

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