はじめに
matplotlibのmplot3dのボクセルグラフでtorusを表示する。
コード
解説
データの生成
トーラスとはドーナツの形のことであり、直交座標系では以下の数式で表せられる。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)
コードをダウンロード(.pyファイル)
コードをダウンロード(.ipynbファイル)
参考
トーラス - Wikipedia
3D voxel / volumetric plot with cylindrical coordinates — Matplotlib 3.1.0 documentation
Python, complex型で複素数を扱う(絶対値、偏角、極座標変換など) | note.nkmk.me
Pythonには複素数を扱うためのcomplex型が標準で用意されている。 単純な計算だけならモジュールをインポートする必要はないが、標準ライブラリcmathをインポートすると複素数に対応した数学関数(指数・対数・三角 ...
matplotlib.colors.hsv_to_rgb — Matplotlib 3.9.2 documentation
コメント
[…] データの生成については、下記のトーラスと同様にして生成した。 […]