[matplotlib 3D] 31. voxels_torus

matplotlib 3D

はじめに

matplotlibのmplot3dのボクセルグラフでtorusを表示する。

コード

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

解説

データの生成

トーラスとはドーナツの形のことであり、直交座標系では以下の数式で表せられる。Rは中心から大外の半径、rはドーナツの半径となる。

$$(\sqrt{x^2 + y^2} – R)^2 + z^2 = r^2$$

関数midpoints(x)は、下記の[matplotlib 3D] 30. voxels_rgbで定義したものとおなじである。

[matplotlib 3D] 30. voxelグラフでRGB色空間を可視化
matplotlibのvoxelグラフで各ボクセルの色を変化させる例として、グラフで各座標位置の値に対応するrgbを当てはめた球を表示する。
r, theta, z = np.mgrid[0:1:11j, 0:np.pi*2:25j, -0.5:0.5:11j]

jは複素数のjとなる。

x = r*np.cos(theta)
y = r*np.sin(theta)

x,yは円筒座標からの変換をしている。

sphere = (rc - 0.7)**2 + (zc + 0.2*np.cos(thetac*2))**2 < 0.2**2

ここで、0.2*np.cos(thetac*2)はwobbly(ぐらぐら)なトーラスを出力するためにいれてある。
<0.2**2とすることでトーラスの部分だけTrueにしている。

色の設定

hsv = np.zeros(sphere.shape + (3,))

hsvの色の設定も[matplotlib 3D] 30. voxels_rgbとおなじとなっている。

colors = matplotlib.colors.hsv_to_rgb(hsv)

hsvからrgbへ変換できる。変換元のhsvは0〜1で与えなければならない。[2]

トーラスの表示

歪んでないトーラス

sphere = (rc - 0.7)**2 + zc**2 < 0.2**2

とすることで、歪んでないトーラスができる。

hsvのままプロット(colors = hsv)

参考

トーラス - Wikipedia
3D voxel / volumetric plot with cylindrical coordinates — Matplotlib 3.1.0 documentation
Python, complex型で複素数を扱う(絶対値、偏角、極座標変換など) | note.nkmk.me
Pythonには複素数を扱うための型、complex型が標準で用意されている。単純な計算だけならモジュールをインポートすることなく使える。ここでは以下の内容についてサンプルコードとともに説明する。複素数の変数を生成 実部と虚部を取得: real, imag属性 共役な複素数を取得: conjugate()メソッド 絶対...
matplotlib.colors.hsv_to_rgb — Matplotlib 3.3.2 documentation
matplotlib 3D python
サボテンパイソン

コメント

  1. […] データの生成については、下記のトーラスと同様にして生成した。 […]