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

matplotlib Animation

はじめに

matplotlibのFuncAnimationにより、鉛直投げ上げのアニメーションを表示する。

コード

解説

モジュールのインポート

3Dグラフの設定

球データの生成

[matplotlib 3D] 18. 3D surfaceプロットで球を表示
matplotlibのmplot3dをつかって、3Dグラフ上にsurface plotで球を表示する方法について解説する。

上記の記事に基づいて、球データを作成する。底面に接するようにzに+rしている。(rは半径)

各種パラメータの設定

初速度をv0、重力加速度を9.8とすると、発射してから戻ってくるまでの時間(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でanimationの表示。updateを50step実行してアニメーションとする。intervalは100 ms なので5秒のアニメーションとなる。
HTML(ani.to_html5_video())でjupyter notebook上にアニメーションを表示できる。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

https://juken-mikata.net/how-to/physics/entyokunageage.html

コメント