物体の放物運動とアニメーション【Pythonと物理#2】

Python

今回のターゲット:物体の放物運動

 前回はPythonを使って物体の放物線運動を解いてみました。

今回は放物運動をアニメーションで可視化してみます。アニメーションを作るために、animation.ArtistAnimation関数を使います。(使い方は後ほど)

Pythonでアニメーションを作る

それではPythonでアニメーションを作ります。

下のようなコードにしました。ほとんど前回の記事と同じですね。

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint 
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from IPython.display import HTML

#諸々の条件設定
g = 9.8 #重力加速度は9.8 m/s^2としておきます
x0 = 0.0 #初期位置 x = 0 mとしておきます
y0 = 0.0 #初期位置 y = 0 mとしておきます
v0 = 30.0 #初期速度 v0 = 30 m/sとしておきます

#θ=45°として、初速のx、y成分を求めておきます。
vx0 = v0/np.sqrt(2) #初期速度のx成分を計算しておきます
vy0 = v0/np.sqrt(2) #初期速度のy成分を計算しておきます
t = np.arange(0, 5, 0.1) #時間は100秒程度に設定しておきます

#計算に必要な関数(微分方程式)の定義
#x座標の計算(戻り値はx方向の速度)※わざわざ計算する意味はほとんどありません
def xcoordinate(x, t, g):
    return vx0
#y座標の計算(戻り値はy方向の速度)
def ycoordinate(y, t, g): #y座標の計算
    return -g * t + vy0

#x座標とy座標の計算 1階微分方程式を解く
#注意:odeintは微分方程式(おそらく1階微分方程式のみ?)を解くライブラリ
#引数は(解きたい微分方程式, 初期値, 変数, args = (パラメータ1, パラメータ2))
#なお、パラメータはタプルで渡して、1つしかない場合は、args = (パラメータ1, )とする
x = odeint(xcoordinate, x0, t, args = (g, ))
y = odeint(ycoordinate, y0, t, args = (g, ))

#以下は可視化のためにグラフを書くコード
fig, ax = plt.subplots()

ax.set_xlabel('x [m]')
ax.set_ylabel('y [m]')

ax.tick_params(direction='in', axis='x')
ax.tick_params(direction='in', axis='y')

ax.set_xlim(0, 100)
ax.set_ylim(0, 30)

#ここまでは前回の記事と同じです

images = [] #画像1枚1枚を保存するリスト

#画像をimagesリストに保存する
for i in range(x.shape[0]): #xの要素ごとに保存
    image = ax.plot(x[0:i], y[0:i], color = 'orange')
    images.append(image)

#AnimationクラスはFuncAnimationとArtistAnimationがあるようです
#筆者はメモリを食うようですが、簡単にできるArtistAnimationを使用しました
ani = animation.ArtistAnimation(fig, images, interval=100)

#imagemagickを使う方法もあるらしいですが、pillowを使用しました
#GIFとして保存します
ani.save("animation.gif", writer="pillow")

#jupyterLabでGIFを再生するためにjavascript化しています
HTML(ani.to_jshtml())

実行結果

それでは実行結果を見てみましょう。下のようなアニメーションになると思います。

最後に

 いかがでしたでしょうか。今回は前回計算した物体の放物運動をアニメーションにしてみました。
実験結果などをアニメーションで視覚的に分かりやすくすることもできますね。

それでは今回はこのあたりで終わりにします。

他にも色々な記事があるのでぜひご覧ください。

コメント

タイトルとURLをコピーしました