[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で作成した球のsurface plotをZ軸に対して回転させたアニメーションについて解説します。

前述と同じ回転方法を適用し、スーパー楕円で生成した四角形の各辺を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 のグラフの回転アニメーション
コードをダウンロード(.pyファイル)

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

参考

matplotlibでrectangleを描く | mwSoft
Superellipse - Wikipedia

コメント