はじめに
matplotlib FuncAnimationでカッシーニの卵形線のアニメーションを作成する。
コード
解説
モジュールのインポート
グリッドと軸ラベル、アスペクト比の設定
卵形線データの生成
卵形線は↓の式のように定義される。
$$(x^2+y^2)^2 -2a^2(x^2–y^2) = k^4 – a^4$$今回は、媒介変数(極座標)で卵形線はデータを生成する。
θ(t)を0〜2π,パラメータaをa=1として、
パラメータkを順次変化させたアニメーションを作成する。
cとsをそれぞれcos(t)とsin(t)としている。
卵形線を媒介変数表示すると↓のようになる。
$$r^2 = a^2cos2\theta \pm \sqrt{a^4cos^2 2\theta +k^4 – a^4}$$rに±があるので√が正なのをr_p_pとし、√が負なのをr_p_mとしている。
それぞれのrでx,yのデータを得ている。
アニメーションを表示するための設定
アニメーションで表示したいグラフを入れる空のリスト、tamagos,tamagossをつくる。
アニメーションの設定
アニメーションでは古いプロットを消す必要があるので、
グラフのリスト(tamagos,tamagoss)にグラフが入っている場合は、pop().remove()で消す。
r_p_p,r_p_mでkの値が異なるデータを順次作成し、それぞれのrでx,yデータを生成してプロットする。goで緑丸での表示となる。moでマゼンタ丸での表示となる。
作成したプロットを空のリスト(tamagos,tamagoss)に入れることでアニメーションを表示できる。
ax.set_title(“cassini, parameter $a$= “+str(a)+”, $k$= “+str(k[num])[:4]+””)でタイトルにアニメーションで変化するkの値をリアルタイムに表示する。[:4]とすることで小数点以下が大量に表示されるのを防いでいる。
アニメーションの表示
FuncAnimationでanimationの表示。updateを200step実行してアニメーションとする。intervalは100 ms なので20秒のアニメーションとなる。
HTML(ani.to_html5_video())でjupyter notebook上にアニメーションを表示できる。
アニメーションの保存
ani.save(‘filename.mp4’, writer=”ffmpeg”,dpi=dpi)でアニメーションを保存することができる。dpiを設定することで指定の解像度での保存が可能。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)
コメント