はじめに
この記事では、Matplotlibライブラリを使用して3Dグラフ上で斜方投射のアニメーションを作成する方法について解説します。FuncAnimationを用いて、物体が空中を放物線を描いて移動する様子を視覚的に表現します。物理法則に基づいた運動をプログラムで再現し、3D空間でのグラフィカルな表示方法を学ぶことができます。
コード
解説
モジュールのインポート
3Dグラフの設定
球データの生成

上記に基づいて球データを作成しています。球体が底面に接するよう、z座標に半径(r)を加えています。
各種パラメータの設定
初速度をv0、重力加速度を9.8 m/s²、打ち上げ角度を60°(π/3)とした場合、物体が発射されてから地面に戻ってくるまでの時間(t)は、以下のようになります。
$$t = \frac{2v_0 sin\theta}{g}$$グリッドと軸ラベル、アスペクト比の設定
球の最高到達点の高さ(h)は、
$$h = \frac{v_0^2 sin^2\theta}{2g}$$となるので、これに基づいてxyzの範囲を設定します。
アニメーションの設定
アニメーションを表示するためのグラフのリストを作成します。
アニメーションでは古いプロットを消す必要があるため、グラフのリスト(ball_1)にグラフが存在する場合は.remove()メソッドで削除します。
tの値が順次変化するにつれて、それに対応するx座標とz座標を計算し、連続的にプロットしていきます。
zの位置は以下のように計算されます。
$$z = v_0 sin\theta \times t -\frac{1}{2} gt^2$$xの位置は↓のようになります。
$$x = v_0 cos\theta \times t $$作成したプロットをリスト(ball_1)に格納することで、アニメーションを効果的に表示することができます。
アニメーションの表示
FuncAnimationを使用してアニメーションを表示します。updateを50ステップ実行してアニメーションを生成します。intervalが100msに設定されているため、全体で5秒のアニメーションとなります。
Jupyter Notebook上ではHTML(ani.to_html5_video())を実行することで、アニメーションを直接表示できます。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)まとめ
Matplotlibのアニメーション機能と3Dグラフを組み合わせることで、物理現象をわかりやすく視覚化できることがわかりました。斜方投射という基本的な物理現象をプログラミングで表現することで、シミュレーションの基礎を学ぶことができます。
コメント