はじめに
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.9.2 documentation
トーラス - Wikipedia
コメント