はじめに
本記事では、Python の matplotlib ライブラリの FuncAnimation 機能を使用して、時間とともに変形する楕円体のアニメーションを作成する方法について解説しています。3次元プロットの作成方法、アニメーション用の関数定義、および楕円体の各軸が周期的に変化する様子を視覚化する手順が含まれています。
コード
解説
モジュールのインポート
バージョン
軸範囲と軸ラベルの設定
データの生成
楕円体は球と同様に、極座標系の媒介変数でデータを生成します。θを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パラメータはそれぞれ行と列の表示間隔を制御し、デフォルト値は1です。本例ではこの値を4に設定しました。
アニメーションでは古いプロットを削除する必要があるため、plotにすでにグラフが存在する場合はremove()メソッドで削除します。次に、x座標とy座標にそれぞれxr、yrの値を乗じて新しい座標(x_、y_)を計算し、新しいプロットを作成します。そして、この新しいプロットをplot[0]に格納します。
アニメーションの表示
FuncAnimationを使用してアニメーションを表示します。アニメーションは100ステップのupdateで構成され、intervalは100msに設定されているため、合計で10秒のアニメーションとなります。Jupyter Notebook上では、HTML(ani.to_html5_video())を実行することでアニメーションを直接表示できます。
まとめ
matplotlib の FuncAnimation を使って3D空間で変形する楕円体を表示するアニメーションを作成しました。各軸のサイズが時間とともに周期的に変化する様子を可視化することで、動的な3Dオブジェクトの表現方法を学びました。このテクニックは科学的なデータ可視化や教育用途に活用できます。
参考

コメント