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

matplotlib Animation

はじめに

この記事ではmatplotlibのFuncAnimationを使用してスーパー楕円(Superellipse)のアニメーションを作成する方法について解説します。スーパー楕円は通常の楕円を一般化した図形で、さまざまな形状を表現できる特徴があります。ここでは数式の説明からアニメーションのコード実装まで詳細に説明します。

コード

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

解説

モジュールのインポート

バージョン

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

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

スーパー楕円は下記の式のように定義されます。

$$|\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を活用することで、数学的な図形であるスーパー楕円のパラメータ変化によるアニメーションを効果的に表現できます。このテクニックは数学的概念の視覚化やデータ表現に応用可能です。

参考

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

コメント

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