弾道シミュレーション

大砲の弾が左下から発射されたとして、どのような軌跡を描くかシミュレーションできます。

ボールを投げるシミュレーションではなく大砲の弾にしたのは、大砲の弾くらいの速度になると空気抵抗が大きくなるからです。つまり軌道計算が少し複雑になります。

各パラメータは、初期値から一つずつ少しずつ変化させてお楽しみください。


各パラメータ操作の意味

各パラメータを単独で変化させたときの意味や理論との違いを書いておきます。

仰角~撃ち出す角度~

水平方向が0度で、垂直方向が90度です。

空気抵抗がないならば、仰角45度で投射すると最も遠くまで届きます。さて、現実のように空気抵抗を考慮すると、一体何度で投射したときが最も遠くまで届くでしょうか。他のパラメータを固定して、仰角だけ変化させて探ってください。

弾丸質量~弾の重さ~

重たいほうがより遠くへ飛ぶのか、軽いほうがより遠くへ飛ぶのか。ピンポン玉を投げる場合と、ゴルフボールを投げる場合をイメージして見てください。

理論的には、他のパラメータが同じなら質量に比例して弾の運動エネルギーが大きくなります。弾の質量が2倍になれば、届く距離も2倍になります。さて、本当でしょうか。他のパラメータを固定して、弾丸質量だけ変化させて探ってください。

初速~弾を打ち出す速さ~

ボールをゆっくり投げたときと、速く投げたときでは、どちらが遠くまで届くでしょうか。

理論的には、他のパラメータが同じなら初速の2乗に比例しして弾の運動エネルギーが大きくなります。弾の初速が2倍になれば、届く距離は4倍になります。さて、本当でしょうか。他のパラメータを固定して、初速だけ変化せて探ってください。

弾丸半径~弾の大きさ~

ゴルフボールとポテトチップスの袋はおおよそ同じ質量です。同じように投げた場合、どちらが遠くまで届くでしょうか。

弾丸半径が大きくなると、空気抵抗の影響を大きく受けます。つまり、弾丸半径が大きくなるとより遠くまで届かなくなります。さて、本当でしょうか。他のパラメータを固定して、弾丸半径だけ変化させて探ってください。

生成AIをもちいた制作

なお、このプログラムはHTML・CSS・JSを生成AIをもちいて制作しました。

最終的に細部の修正は、わたしが手作業で修正をしています。

ちなみに、書いたプロンプトは以下のような感じです。

1回目

javascriptで砲弾の弾道シミュレーションを作ってください。条件は以下によります。
・2次元(x-yのみ)であること
・x軸の距離は5kmまでとすること
・仰角を0度から90度で変えられること
・画面左から発射し、画面右方向に着弾すること
・空気抵抗を考慮すること
・0.1秒毎に弾丸の位置を表示すること。
・弾丸の軌跡は、弾丸の直径より小さい点線で表示すること
・数値計算により実装すること

2回目

下のコードが求めているものに一番近いです。これをもとに改良して下さい。
・横軸と縦軸の目盛り追加(1kmごと)
・弾丸が着弾した時にすべての軌跡を描くのではなく、飛行中もアニメーションでシミュレートしてください
・画面上に表示される弾丸の大きさは、わかりやすいように適切な大きさとしてください。計算には、今のままのスケールを使って下さい。
・仰角が画面表示と違うように見えるので、見直してください。

~コード省略~

3回目

下のコードをもとに、以下の機能を追加修正して下さい。
・弾丸の質量を変更できるようにしてください。
・角度、初速、質量の数値は、ルーラーで変更できるようにしてください。
・リセットボタンを押すまで、軌跡は消去しないでください。
・弾丸の軌跡は、線だけとし、過去の弾丸の表示はしないでください。
・空気抵抗は、速度の自乗に比例する分も追加してください。すでに追加してあるなら不要です。

~コード省略~

4回目

以下を修正してください。
・横軸は10kmまでとし、1kmごとに目盛り表示してください
・縦軸は2kmまでとし、500mごとに目盛り表示してください
・弾丸質量は0.1~100kgとしてください。
・弾丸初速は、0~2000m/sとしてください

以下のコードをベースに修正してください。
・弾丸半径を0.1~1mの範囲でスライダーで変更できるようにしてください。
・横軸の目盛りを2kmごとに表示してください。
・y軸を高度として、空気密度を高度の関数としてシミュレートしてください

~コード省略~

なお、最後まで横軸の目盛りは数値を表示してくれませんでした。手で、修正しています。

生成AIへの指示によって、できあがりは大きく変わる

一回目のプロンプト(AIへの指示)で、手を抜いて以下のように書いたらどうなるでしょうか。

javascriptで砲弾の弾道シミュレーションを作ってください。

細かい指示をせずに、手抜きで作成したプログラムがこちらです。画面読み込みと同時に弾が投射されるので、動画にしています。

プロンプト(生成AIへの指示)によって、アウトプットが大きく変わることがわかると思います。生成AIに対して、詳細に指示を出すと、アウトプットも精緻になります。