水平投射シミュレーター(太陽系の天体の地表で)
ボールを水平投射したときのシミュレーターです。単に各パラメーターを変更できるだけでは面白くないので、太陽系の天体の地表(ガス天体を地表というのかは?です)で、どうなるかをシミュレートできるプログラムとしました。
3階建てくらいのビル屋上から投げられたボールが、どのように跳ねるかを再現しました。
シミュレーション開始を押すと、その時のパラメーターでシミュレーションを開始します。高度0で速度0になったら自動でシミュレーションを停止します。停止したら、再度パラメーターを変えてシミュレーション開始できます。
生成AIをもちいた制作
なお、このプログラムはHTML・CSS・JSを生成AIをもちいて制作しました。
8割くらいはすぐに出力してくれたのですが、残りの2割の詳細を完成させるのに時間がかかりました。背景色を変えたり、瞬時値の表示色など、ごく細部を手修正しています。
ちなみに、書いたプロンプトは以下のような感じです。
1回目
JavaScriptで、水平投射したボールの運動を示すシミュレーターを作ってください。ただし、詳細仕様は下記のとおりです。
・ボールは、左から右に投射されるものとします。
・空気抵抗を計算してください。
・ボールの質量、水平投射の初期速度、重力加速度、空気密度、ボールの直径を変更できるものとします。
・変更は、テキストボックスに直接数字を入力できるものとします。
・テキストボックスは、スライダーと連動して動くものとします。
・変更可能な各要素は、縦方向に並べてください。
・ボールの質量の初期値は、1kgとします。変更範囲は、0.1~100kgで0.1kg刻みとします。
・初期投射速度は、3m/sとします。変更範囲は、0~200m/sで1m/s刻みとします。
・重力加速度は、地球の標準値とします。変更範囲は、0.1m/s2~太陽の重力加速度で、0.1m/s2刻みとします。
・空気密度は、地球の標準値とします。変更範囲は、0~10g/cm3で、0.1g/cm3刻みとします。
・ボールの直径は0.2mとします。ただし、画面の見かけ上直径を反映させません。視認するのに適切な大きさで一定としてください。
・ラジオボタンを8つ作ってください。それぞれのラベルは、「太陽」「水星」「金星」「地球」「月」「火星」「木星」「土星」とします。
・ラジオボタンは、初期状態で地球を選択しているものとします。
・ラジオボタンは、テキストボックスとスライダーの画面上方向に設置されるものとします。
・ラジオボタンの選択を変えると、それぞれの天体の重力加速度・空気密度がテキストボックスに反映されるものとします。
・それぞれの天体の重力加速度・空気密度が、上記で指定した変更範囲を超える場合は、各天体の値を優先して変更範囲を変えてください。
・そのほか、必要な情報・確認は指示してください。
2回目
以下の仕様を追加してください。
・ボールが地面にあたったら、損失0で跳ね返るものとします。
・初期高さは、10mとします。
3回目
以下のコードをベースに改良してください。
・跳ね返ったときの損失は5%としてください。~コード省略~
4回目
以下のコードをベースに改良してください。
・「一時停止/再開ボタン」を設置し、クリックしたときはそのときのボールの位置でシミュレーションを一時停止してください。
・一時停止中に、「一時停止/再開ボタン」をクリックしたときは、その時点からシミュレーションを再開してください。
・画面から右方向にボールがでたら、シミュレーションを終了してください。
・リセットボタンを設置してください。
・リセットボタンをクリックしたときの挙動は、「シミュレーションを終了」「ボールを初期位置へ戻す」「軌跡を消す」としてください。
・開始ボタンは、シミュレーションが終了するまでグレーアウトしてください。
・軌跡は、惑星ごとに色を変えてください。また、その凡例を示してください。
・ボールの直径を変更可能にしてください。変更範囲は0.1~2mで、0.1m刻みとします。
・初期位置は、画面の最上部から10%下の位置としてください。~コード省略~
5回目
以下の機能を修正・追加してください。
・位置、速度、天体の現在地は右上に表示してください。
・軌跡は、リセットボタンがクリックされるまで表示したままにしてください。
・1回バウンドするごとに、x軸方向の1%の損失があるとしてください。
6回目
以下の機能を追加してください。
・ボールが画面から出るか、停止したときは、シミュレーションを終了します。ただし、軌跡は描画されたままとします。