等速直線運動
まず最初の例として、加速度が常に 0 であるとき、すなわち等速直線運動について考えます。 Verlet 法の更新式に基づいて Processing のプログラムを作成します。
See the Pen コンピューティング2 5-1 by Yosuke Onoue (@likr) on CodePen.
放物運動
次に放物運動を考えます。 例えばボールを真上に放り投げたとき、しばらく上昇してから下降を始めます。 これはボールが重力によって下方向に加速し続けるためです。
地球上の重力加速度は約 です。 しかし、1 ピクセルの距離や 1 フレームの時間を適切に定めることで、プログラム上では加速度の値は計算のしやすい値に設定することができます。
Processing でのプログラムは以下のようになります。
See the Pen コンピューティング2 5-1 by Yosuke Onoue (@likr) on CodePen.
さらに、横方向の初速度を加え、投射運動をシミュレーションしてみます。
See the Pen コンピューティング2 5-2 by Yosuke Onoue (@likr) on CodePen.
壁への衝突
画面の端を壁と見立てて、壁に当たったときに物体が反射する動作を上のプログラムに加えます。 反射は速度を-1 倍することで実現されます。
プログラムにすると以下のようになります。
See the Pen コンピューティング2 5-3 by Yosuke Onoue (@likr) on CodePen.
上のプログラムでは、壁への衝突によって減速が起こりませんでした。 衝突の度に減速の効果を加えると以下のようになります。
See the Pen コンピューティング2 5-4 by Yosuke Onoue (@likr) on CodePen.
力の加算
物体に複数の力がかかっている場合、物体の加速度はそれぞれの力の影響力の加算で表すことができます。
例えば、空気抵抗を考慮した自由落下では、物体にかかる力は以下のように表されます。
物体の運動をシミュレーションする際には、 と による加速度をそれぞれ別で計算して足し合わせることができます。 プログラムにすると以下のようになります。
See the Pen コンピューティング2 5-5 by Yosuke Onoue (@likr) on CodePen.
Verlet 法プログラムの整理
Verlet 法のプログラムは以下の部分から構成されています。
- オブジェクトの描画
- 座標の更新
- 速度の更新
速度の更新は、さらにオブジェクトにかかる力をそれぞれ個別に適用することで処理を分割できます。 より複雑なシミュレーションを行うため、プログラムを関数化して整理します。
以下のプログラムは、重力、壁の反射、空気抵抗を考慮した球体の運動を関数化して整理したプログラムです。
See the Pen コンピューティング2 5-6 by Yosuke Onoue (@likr) on CodePen.
以降はこのプログラムをベースにしてシミュレーションを行います。