[matplotlib 3D] 43. 直方体(Cuboid)

matplotlib 3D

はじめに

この記事では、matplotlib の mplot3d を使用して3Dグラフ上に直方体(Cuboid)を表示する方法について解説します。3Dグラフィックスで立体的な直方体を描画する手法です。

コード

解説

モジュールのインポート

バージョン

3Dグラフの設定

データの生成

パラメータtはxy平面上の媒介変数を表し、zは高さ方向のデータを表します。tとzからmeshgridを作成することで、3次元空間でのプロットが可能になります。直方体の形状はスーパー楕円の式を用いて生成します。

[matplotlib animation] 17. スーパー楕円(Superellipse)
matplotlibのFuncAnimationを使ってスーパー楕円のアニメーションを作成する方法を解説。数式の基本から実装コードまで、数学的図形の動的な表現方法を学べる記事です。

スーパー楕円は下記の式のように定義されます。

$$|\frac{x}{a}|^p + |\frac{y}{b}|^p = 1$$

p=1のとき四角形になります。プロットするデータは媒介変数で生成します。媒介変数θ(t)は0〜2πの範囲を取ります。aはy=0におけるx軸の半径、bはx=0におけるy軸の半径です。ここでは、cとsはそれぞれcos(t)とsin(t)を表します。スーパー楕円を媒介変数表示すると以下のようになります。

$$x(t) = |cost|^\frac{2}{p}\cdot a sgn(cost)\\y(t) = |sint|^\frac{2}{p}\cdot b sgn(sint)$$

直方体データの回転

[matplotlib animation] 3.球のz軸回転アニメーション
matplotlibのmplot3dを使用して作成した3D球体モデルをZ軸周りに回転させるアニメーションの作成方法を解説しています。Pythonによる3Dアニメーション実装の基本から応用まで、コード例を交えて詳しく説明しています。

前述と同じ回転方法を適用し、スーパー楕円で生成した四角形の各辺をx軸とy軸に平行にします。原点を中心に角度γだけ回転させた場合、x座標とy座標は以下のように表されます。

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

回転させた場合の図は以下のようになります。

底面と上面の設定

底面と上面はRectangleを使用して作成します。

Rectangleを使うと四角形を描画できます。xyパラメータで四角形の左下座標を指定し、widthで幅(x軸方向の長さ)、heightで高さ(y軸方向の長さ)を設定します。このコードではnp.min()とnp.max()を使ってこれらの値を設定しています。

2次元データを3次元空間上に表示するために、art3d.pathpatch_2d_to_3dを使用しました。zdir=”z”と設定し、zパラメータに表示したい高さを指定することで、任意の高さに四角形を配置できます。

軸範囲、軸ラベルの設定

3Dグラフの表示

回転アニメーション

作製した図を回転させると以下のようになる。

回転アニメーションは以下の記事を参考にして作成しました。

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

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

参考

matplotlibでrectangleを描く | mwSoft
Superellipse - Wikipedia

コメント