N88-BASICでゲーム (2回目)
2021/8/18(水)
N88-BASICでゲーム (2回目)
by ULproject
1. 斜方投射で的方向に投なげる
(発射と同時に的を落とすとあたる)
2. 的にあたるように投げる(低い軌道)
3. 的にあたるように投げる(高い軌道)
の3通りを1~3キーで選び的にあてるゲームです
ターゲットは1/2の確率で落ちます
よって、1/2の確率で当たるゲーム
です
投げ方は3通りですが、当たる確率は1/2です
何かパラドックスが作れそうですね
以下、式の説明です
以後ベクトルを大文字、その他は小文字にします
加速度A = const.(一定)、
速度V、初速度V0、
位置P、初期位置P0
時間t、微小時間dt
とすると、
速度の微小増分dV = Adt
(速度の増分=加速度×時間は微小時間
なら加速度一定でなくても成り立つ)
dV/dt = Aとすると、
Vの時間微分がAと分かる。
両辺tで積分すると
∫dV/dt dt = ∫Adt
∫dV = ∫Adtは、A = const.なので、
V = At + C
ここでt=0のときV=V0なので、
V0 = C よって、
V = At + V0
位置の微小増分dP = Vdt
(位置の増分=速度×時間は微小時間
なら速度一定でなくても成り立つ)
dP/dt = Vとすると、
Pの時間微分がVと分かる。
両辺tで積分すると
∫dP/dt dt = ∫Vdt
∫dP = ∫Vdt
P = ∫ At+V0 dt
= (1/2)Att + V0t + C
ここでt=0のときP=P0なので、
P0 = C よって、
P = (1/2)At2 + V0t + P0
図1. 速度と時間のグラフ
速度と時間のグラフv - at + v0の
傾きaが加速度(一定の場合)で、
面積(1/2)at2 + v0tが移動距離になります
三角形の部分が分かりにくいときは
水色の長方形が各時間の間の移動距離
になりますので、三角形の面積と一緒に
なります
等加速度運動(加速度一定の運動)の場合
初速と最高速の平均速度で移動したのと
同じ距離移動します
傾きを求めるのが微分で、面が積分です
まとめ
A = 一定
V = At + V0
P = (1/2)At2 + V0t + P0
ここでΔt = t2 - t1とし、Δtを
単位時間(例1/60sを1)とすると、
V2 - V1 = At2 + V0 - (At1 + V0)
= A(t2-t1) = AΔt
V2 = V1 + A
P2 - P1 = (1/2)At22 + V0t2 + P0
- (1/2)At12 + V0t1 + P0
= AΔt2/2 + V0Δt
P2 = P1 + A/2 + V0
となり、
プログラムでは、
1/60sに1回
V = V + A
P = P + V + A / 2
を計算すればよいことになる。
この場合時間の単位はsではなく
1/60sを1とした単位となる。
斜方投射の場合、水平方向をx軸
上方向をy軸とし、x軸からの仰角
をθ、初速の大きさをv、重力加速度の
大きさをg、初期位置を原点とすると、
A = ( 0, -g)
V0 = (vcosθ, vsinθ)
P = V0t + At2/2
= (vtcosθ, vtsinθ-gt2/2)
[tanθ=sinθ/cosθ、
tanθtanθ+1
= (sinθsinθ+cosθcosθ)/(cosθcosθ)
= 1/(cosθcosθ)]
x = vtcosθ … ①
y = vtsinθ-gt2/2 … ②
式①より、t = x/(vcosθ)を②に代入
y = xsinθ/cosθ-gx2/(2v2cos2θ)
上記公式より、
y = (tanθ)x - {g(tan2θ+1)/(2v2)}x2
点Q(x,y)を通るように投げる場合、
P = Qとなるθを求める式を作ります
tanθについて整理すると、
gx2tan2θ-2v2xtanθ+2v2y+gx2 = 0
2次方程式の解の公式ax2 + 2bx + c = 0
x = -b±√(b2-ac)より、
tanθ = [v2x±√{v4x2-gx2(2v2y+gx2)}]/gx2
を整理して、
tanθ = [v2±√{v2(v2-2gy)-(gx)2}]/gx
となり、逆三角関数で角度を求めます
7,8,9,0キーで軌道の表示
カーソルキーでターゲット移動
1,2,3キーで発射
Enterキーでリセット
などです
初めにAlt+6(Alt+2で元に戻る)を押して
高速化しておいて下さい
BASICでは、
仰角(-π/2~π/2)=ATN(高さ/底辺)ですが、
仰角(-π~π)で求める*ATN2という
サブルーチンで求めています
NL-BASICとblg~.zip(game002.bas)は
以下のリンクからダウンロードできます
Readme.txtを読んで遊んで下さい