[matplotlib animation] 12. 変形する楕円体

matplotlib Animation

はじめに

matplotlib FuncAnimationにより、変形する楕円体のアニメーションを表示する。

コード

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

解説

モジュールのインポート

バージョン

軸範囲と軸ラベルの設定

データの生成

楕円体は球と同様に、極座標系の媒介変数でデータを生成する。
θを0〜2π,φを0〜πとすると、以下のようになる。

$$x=acos\theta sin\phi\\y=bsin\theta sin\phi\\z=ccos\phi$$

ここでa,b,cは各x,y,z軸方向の径の半分の長さとなる。
ここでは、a=b=1, c=5と設定している。

アニメーションではa,bを変化させる。そのために、xr(a)とyr(b)をlinspaceで作成する。
xrは大きくして小さくする配列でyrは小さくして大きくする配列となっている。
それぞれlinspaceの配列をhstackで連結して作成した。

アニメーションの設定

まずアニメーションで動くグラフにするためにリスト内にplot_wireframeを作成する。
wireframeのrstride, cstrideはそれぞれrowとcolumnの表示間隔でデフォルト値は1となっている。ここでは4とした。

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

x,yにxr,yrの値を乗じて、x_,y_としてプロットを作成。
plot[0]にそれを入れる。

アニメーションの表示

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

参考

楕円体 - Wikipedia
Numpy の vstack、hstack で配列を連結-python | コード7区
vstack、hstack は、配列を縦(vstack)、または横(hstack)に連結します。Numpy の concatenate でも同様の処理が可能です。

コメント