[matplotlib animation] 3.球のz軸回転アニメーション

matplotlib 3D

はじめに

この記事では、Pythonのmatplotlibライブラリを使って3次元空間内の球体モデルをZ軸周りに回転させるアニメーションを作成する方法を説明します。

コード

解説

下記では、視点を回転させるアニメーションを作成しました。今回は、プロット自体を軸に対して回転するアニメーションを作成しました。

[matplotlib 3D] 14. 3Dグラフの回転アニメーション
matplotlibのmplot3dを使用して3Dグラフの回転アニメーションを作成する方法を解説します。動画として保存する手順や回転角度の制御など、3Dビジュアライゼーションを動的に表現するための基本テクニックを紹介します。

モジュールのインポート

3Dグラフにする設定

プロットするデータの生成

u, v は極座標でいうθとφとなります。極座標で球は以下の式で表せられます。

$$x=rcos\theta sin\phi, y=rsin\theta sin\phi, z=rcos\phi$$

プロットできるようにするために、meshgrid状のデータを作成します。
np.outer()は外積で、2つのデータの要素の全てを掛け合わせます。
np.size()は要素を返してくれるのでnp.size(u)は100となります。
np.ones(np.size(u))はnp.ones(100)となるので1が100個のデータができることになります。

軸の範囲、ラベルの設定

ax.set_aspect(‘equal’)は3dグラフでは使えません。

3D surfaceグラフの作成

plotは[]で囲んでリストにする必要があります。

アニメーションで表示するグラフの設定

このanimationは、plot[0]を随時更新していくことでアニメーションとします。
よって、最初に前のグラフをremove()で取り除きます。
そして、回転したデータを生成します。回転角をγとすると、Z軸周りに角度γ回転したときの式は、

$$x’=xcos\gamma – ysin\gamma\\y’=xsin\gamma + ycos\gamma\\z=z$$

となります。

アニメーションの設定

FuncAnimationを使用してアニメーションを作成します。 figにupdateのanimationを描画し、フレーム数を100に設定します。intervalは100 msなので、全体で10秒の動画になります。fargsはupdate関数に渡す引数で、x、y、z、uおよびplotを指定する必要があります。

また、HTMLの.to_html5_video()メソッドを使用すると、アニメーションをHTML5形式で表示できます。

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

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

参考

外積を求めるnumpy.outer関数の使い方
NumPyには配列の要素同士の全ての組み合わせによる乗算を求める外積を行なってくれルouter関数が存在します。本記事では外積とouter関数についての解説をしました。
http://www.sol-j.co.jp/mailmag/a-0052.html
Generate animation of 3D surface plot using plot_surface and animation.ArtistAnimation in Python and matplotlib.pyplot
This page shows how to generate an animation of 3D surface plot using plot_surface and animation.ArtistAnimation in pyth...

コメント

  1. […] [matplotlib animation] 3.球のz軸回転アニメーションmatplotlibのmplot3dで作成した球のsurface plotをZ軸に対して回転させたアニメーションについて解説します。sabopy.com2018.11.19 […]