はじめに
この記事は、matplotlibのFuncAnimationを使って鉛直投げ上げ運動のアニメーションを作成する方法について解説します。物理法則に基づいて物体の位置を計算し、それをアニメーションとして視覚化する手法を紹介します。重力加速度の影響で上昇→最高点→下降する物体の動きを、Pythonのコードでシミュレートする方法が示します。
コード
解説
モジュールのインポート
3Dグラフの設定
球データの生成

上記の記事を参考に球データを作成します。球の底面が接するように、z座標に半径(r)を加えています。
各種パラメータの設定
初速度をv0、重力加速度を9.8 m/s²とすると、物体が発射されてから地面に戻ってくるまでの時間(t)は、
$$t = \frac{2v_0}{g}$$グリッドと軸ラベル、アスペクト比の設定
球の最高到達点の高さ(h)は、
$$h = \frac{v_0^2}{2g}$$となるため、これに基づいてxyzの範囲を設定します。
アニメーションの設定
アニメーションを表示するためのグラフのリストを作成します。
アニメーションでは古いプロットを消す必要があるため、グラフのリスト(ball_1)にグラフが入っている場合は.remove()メソッドで削除します。
tの値が順次変化するにつれて、それに対応するzの値を計算し、連続的にプロットしていきます。
zの位置は、以下のように計算されます。
$$z = v_0 t -\frac{1}{2} gt^2$$作成したプロットをリスト(ball_1)に格納することで、アニメーションをスムーズに表示できます。
アニメーションの表示
FuncAnimationを使用してアニメーションを表示します。updateを50ステップ実行してアニメーションを生成し、intervalを100msに設定することで、合計5秒間のアニメーションとなります。
HTML(ani.to_html5_video())を実行することで、Jupyter Notebook上に直接アニメーションを表示できます。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)まとめ
matplotlibのFuncAnimationを利用して、物理現象である鉛直投げ上げ運動を視覚的に表現するアニメーションを作成できることがわかりました。重力による加速度の影響を計算し、時間経過に伴う物体の位置変化を滑らかに表示することが可能です。このようなアニメーションは、物理教育や現象の理解に役立つビジュアライゼーションツールとなります。
コメント