[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型が標準で用意されている。単純な計算だけならモジュールをインポートする必要はないが、標準ライブラリcmathをインポートすると複素数に対応した数学関数(指数・対数・三角関数など)も使える。cmath --- 複素数のための数学関数 — Python 3.9.4 ドキュ...
https://matplotlib.org/api/_as_gen/matplotlib.colors.hsv_to_rgb.html
matplotlib 3Dpython
サボテンパイソン

コメント

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