万有引力シミュレーション
無重力、真空の空間で、質量を持った球体がどのような挙動をするかシミュレーションします。球体は、範囲内で質量がランダムに決まります。発射ボタンを押すと、質量が青色の球体の10倍ほどの球体が左方向から発射されます。
シミュレーションを始めると、自然と中心部に集まり大きな球体になります。そして、自転を始めます。自転が速くなると、引力で球体を維持できずバラバラになります。そのうち、球体を維持できる大きさの塊がいくつか出来上がります。
生成AIをもちいた制作
なお、このプログラムはHTML・CSS・JSを生成AIをもちいて制作しました。
概要はすぐできました。しかし、パラメーター調整がなかなかうまく行きませんでした。
ちなみに、書いたプロンプトは以下のような感じです。
1回目
あなたは優秀なフロントエンドプログラマーです。そして、物理学にも精通しています。
javascriptで、真空中・無重力で100個の球体が存在するとして、万有引力をシミュレートするプログラムを作ってください。
詳細仕様は、以下によります。・それぞれの球体は、1000000kgとしてください。
・球体同士の反発係数は0とします。
・10秒ほどで動きが収束するように、デルタ時間を加速してください。
・数値計算法によりシミュレートしてください。
・画面端で跳ね返るものとします。
2回目
以下のコードをベースに改良してください。
・画面中央付近(x方向70%、y方向50%)に、質量が10,000,000kgの球体を配置してください。この球体は動かず、大きさを持ちません。
・球体の大きさを半分にし、数を300個としてください。色は青とします。
・画面左から、300個の球体と同じ大きさ・質量の球体を発射します。ただし、速度は10m/sとします。
・また、画面にボタンを配置し、ボタンをクリックしたときに球体を発射します。
・発射された球体は、色を黃とします。~コード省略~
3回目
以下を追加修正してください。差分だけでOKです。
・左から発射する球体は、Y方向50%の位置としてください。
・発射する球体の速度は、500m/sとしてください。
4回目
リセットボタンを追加してください。差分だけでOKです。
5回目
これまでのコードの重複を排除して、短縮してください。また、そのほかの最適化もお願いします。
できあがったら、コード全体を表示願います。
6回目
それぞれのボールに質量を持たせて書き換えてください。
7回目
打ち込む球体の大きさを10倍にしてください。差分だけでOKです。
8回目
以下を追加修正してください。差分だけでOKです。
球体同士の衝突は、5%跳ね返るものとします。
9回目
反発係数を0に調整したとき、挙動がおかしいです。再検討してください
10回目
以下のコードで、リセットボタンと、発射ボタンを横に並べてください。差分だけでOKです。
~コード省略~
多少コードを手修正しています。以下が調整した内容。
- 中央部の球体はなくしました
- 質量は、AI提示のものより変更しています
- 球体の数を増やしました
- 反発係数も調整しています