[matplotlib 3D] 31. voxels_torus

matplotlib 3D
スポンサーリンク
スポンサーリンク

voxels_torus

コード

でできる図。

スポンサーリンク

解説

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

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

midpoints(x)は、[matplotlib 3D] 30. voxels_rgbとおなじ。

r, theta, z = np.mgrid[0:1:11j, 0:np.pi*2:25j, -0.5:0.5:11j]

jは複素数のj?[1]

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)

スポンサーリンク

参考

  1. Python, complex型で複素数を扱う(絶対値、偏角、極座標変換など …
  2. matplotlib.colors.hsv_to_rgb — Matplotlib 3.0.0 documentation
スポンサーリンク
matplotlib 3Dpython
スポンサーリンク
この記事をシェアする
sabopy.comをフォローする
スポンサーリンク
サボテンパイソン

コメント