[matplotlib animation] 19. 鉛直投げ上げ (vertical throw up)

matplotlib Animation

はじめに

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

コード

解説

モジュールのインポート

3Dグラフの設定

球データの生成

[matplotlib 3D] 18. 3D surfaceプロットで球を表示
matplotlibのmplot3dを使用して3Dグラフ上にsurface plotで球体を表示する方法を解説します。球の方程式からメッシュグリッドを作成し、3次元空間に美しく球体を描画する手順を紹介します。

上記の記事を参考に球データを作成します。球の底面が接するように、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を利用して、物理現象である鉛直投げ上げ運動を視覚的に表現するアニメーションを作成できることがわかりました。重力による加速度の影響を計算し、時間経過に伴う物体の位置変化を滑らかに表示することが可能です。このようなアニメーションは、物理教育や現象の理解に役立つビジュアライゼーションツールとなります。

参考

鉛直投げ上げ公式の覚え方・これでもう絶対に間違えない!|高校生向け受験応援メディア「受験のミカタ」
鉛直投げ上げの公式と最高点の高さの求め方・公式、そして計算問題をご紹介します。鉛直投げ上げの公式はすぐに導くことができ、難しくはありません。この記事を読み終えた頃には、鉛直投げ上げについてほぼ完ぺきに理解できているようになっているでしょう。

コメント