[matplotlib Animation] 9. 螺旋トーラスのアニメーション

matplotlib Animation

はじめに

matplotlib FuncAnimationで螺旋トーラスの3Dアニメーションを作成する方法について説明する。

コード

解説

モジュールのインポート

バージョン

データの生成

トーラスは媒介変数でデータを生成するので、uを0から2π、vを-4πから4πまでとして、meshgrid化する。

螺旋状トーラスは媒介変数で以下のようになる。らせん的な変化のためにzに+vとしている。ここでbはトーラス自体の輪っかの半径、aはトーラスの太さの半径となる。

$$x = (b+asin(u))cos(v)\\ y = (b+asin(u))sin(v)\\ z = asin(u)+v$$

3Dグラフの作成

plt.subplotsで3Dグラフとするには、subplot_kw=dict(projection=’3d’)とする。
plotにアニメーション表示するためのplot_surfaceを設定しておく。ここではとりあえずの設定なので、alpha=0で透明にしておく。また、[]で囲んでリストにしておく。

アニメーションの設定

アニメーションでは古いプロットを消す必要があるので、plot[0].remove()で消す。
u,vを[:num]でスライスしていくことで、x,y,zデータを拡張し、グラフに表示するplot_surfaceを順次拡張していく。
拡張したデータのplot_surfaceは、plot[0]にセットしていく。

これを繰り返すことでアニメーションとする。

アニメーションの表示

FuncAnimationでanimationの表示を行う。updateのnumを100としているので、frame数は100とする。100 frames×40 ms = 4000 ms = 4秒のアニメーションとなったものを、to_html5_videoでHTMLビデオ化する。

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

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

参考

matplotlib.animation.FuncAnimation — Matplotlib 3.8.3 documentation
トーラス - Wikipedia

 

コメント