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

matplotlib 3D

はじめに

matplotlib mplot3dにより、直方体を3Dグラフに表示する方法について説明する。

コード

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

解説

モジュールのインポート

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にプロットしたいz軸方向の高さを指定することで、指定の高さに四角形を表示できる。

軸範囲、軸ラベルの設定

3Dグラフの表示

参考

matplotlibでrectangleを描く | mwSoft
Superellipse - Wikipedia

コメント