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

matplotlib 3D

はじめに

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

軸範囲、軸ラベルの設定

3Dグラフの表示

回転アニメーション

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

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

[matplotlib 3D] 14. 3Dグラフの回転アニメーション
matplotlib mplot3d のグラフの回転アニメーション
コードをダウンロード(.pyファイル)

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

参考

matplotlibでrectangleを描く | mwSoft
Superellipse - Wikipedia

コメント