[matplotlib animation] 18.カッシーニの卵形線

matplotlib Animation

はじめに

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ファイル)

参考

Cassini oval - Wikipedia

コメント