[matplotlib animation] 17. スーパー楕円(Superellipse)

matplotlib Animation

matplotlib FuncAnimationによるスーパー楕円のアニメーション

コード

でできるアニメーション。

解説

モジュールのインポート

グリッドと軸ラベル、アスペクト比の設定

スーパー楕円データの生成

スーパー楕円は↓の式のように定義される。

$$|\frac{x}{a}|^n + |\frac{y}{b}|^n = 1$$

今回は、媒介変数でスーパー楕円はデータを生成する。
θ(t)を0〜2π,aがy=0におけるx軸の半径,bがx=0におけるy軸の半径となる。
cとsをそれぞれcos(t)とsin(t)としている。

スーパー楕円を媒介変数表示すると↓のようになる。

$$x(t) = |cost|^\frac{2}{n}\cdot a sgn(cost)\\y(t) = |sint|^\frac{2}{n}\cdot b sgn(sint)$$

sgn()は符号関数で()内にマイナスの値が入るときは-1、プラスの値のときは+1, ゼロのときは0を返してくれる。コードではnp.sign()を用いている。

この式のnを順次変化させるアニメーションを作成する。

アニメーションを表示するための設定

アニメーションで表示したいグラフを入れる空のリスト、Superellipses =[]をつくる。

アニメーションの設定

アニメーションでは古いプロットを消す必要があるので、
グラフのリスト(Superellipses)にグラフが入っている場合は、pop().remove()で消す。

x,yでnの値が異なるデータを順次作成し、Superellipse, = plt.plot(x, y, ‘g-‘, lw=2)
で、スーパー楕円を表示する。g-で緑線での表示となる。

作成したプロットを空のリスト(Superellipses)に入れることでアニメーションを表示できる。

ax.set_title(“Superellipse, parameter $n$= “+str(n[num])[:4])でタイトルにアニメーションで変化するnの値をリアルタイムに表示する。[:4]とすることで小数点以下が大量に表示されるのを防いでいる。

アニメーションの表示

FuncAnimationでanimationの表示。updateを100step実行してアニメーションとする。intervalは100 ms なので10秒のアニメーションとなる。
HTML(ani.to_html5_video())でjupyter notebook上にアニメーションを表示できる。

アニメーションの保存

ani.save(‘filename.mp4’, writer=”ffmpeg”,dpi=dpi)でアニメーションを保存することができる。dpiを設定することで指定の解像度での保存が可能。

参考

Superellipse - Wikipedia
NumPyの使い方(ユニバーサル関数) - abcdefg.....
NumPyのユニバーサル関数の使い方のメモです。

コメント

  1. […] [matplotlib animation] 17. スーパー楕円(Superellipse)matplotlib FuncAnimationによるスーパー楕円のアニメーションsabopy.com2018.12.25 […]