はじめに
この記事ではmatplotlibのFuncAnimationを使用してスーパー楕円(Superellipse)のアニメーションを作成する方法について解説します。スーパー楕円は通常の楕円を一般化した図形で、さまざまな形状を表現できる特徴があります。ここでは数式の説明からアニメーションのコード実装まで詳細に説明します。
コード
解説
モジュールのインポート
バージョン
グリッドと軸ラベル、アスペクト比の設定
スーパー楕円データの生成
スーパー楕円は下記の式のように定義されます。
$$|\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を使用してアニメーションを表示します。updateを100ステップ実行してアニメーションを生成します。intervalは100msに設定されているため、全体で10秒のアニメーションとなります。
Jupyter Notebook上では、HTML(ani.to_html5_video())を実行することでアニメーションを表示できます。
アニメーションの保存
アニメーションは
ani.save(‘filename.mp4’, writer=”ffmpeg”, dpi=dpi)で保存できます。dpiパラメータを設定することで、希望する解像度での出力が可能になります。
まとめ
matplotlibのFuncAnimationを活用することで、数学的な図形であるスーパー楕円のパラメータ変化によるアニメーションを効果的に表現できます。このテクニックは数学的概念の視覚化やデータ表現に応用可能です。
参考

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