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)は

以下のリンクからダウンロードできます

NL-BASIC(N88-BASIC互換?)ホームページ

Readme.txtを読んで遊んで下さい




このブログの人気の投稿

NEWS

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