トーラスのPythonコード(媒介変数表示)

Pythonで媒介変数表示を利用してトーラスの3次元の図を出力してみよう。

説明

mpl_toolkits.mplot3dモジュールのAxes3Dで3Dグラフを表示する。

トーラスの大円の半径と小円の半径をRrとする。媒介変数uv を $0$ から $2 \pi$ の間で定め, u,v = numpy.meshgrid(u,v)で媒介変数の全ての組み合せを作る。

媒介変数表示を利用したトーラスの3次元座標は

$\left\{\begin{aligned}
x &= (R + r \cos v) \cos u \\
y &= (R + r \cos v) \sin u \\
z &= r \sin v
\end{aligned} \right. $

で表せる。

$R>r > 0$, $0 \leq u, v < 2 \pi$ とする。水平方向の円周の半径が $R-r$ から $R+r$ の長さ(チューブの中心円の半径が $R$ )で, 鉛直方向の円周の半径が $r$ のトーラスの媒介変数表示は次の通り:

$\left\{\begin{aligned}
x &= (R + r \cos v) \cos u \\
y &= (R + r \cos v) \sin u \\
z &= r \sin v
\end{aligned} \right. $

Pythonコード.

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# トーラスの半径
R = 3  # 大円の半径
r = 1  # 小円の半径

# 媒介変数の範囲
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, 2 * np.pi, 100)
u, v = np.meshgrid(u, v)

# 媒介変数を用いて座標を計算
x = (R + r * np.cos(v)) * np.cos(u)
y = (R + r * np.cos(v)) * np.sin(u)
z = r * np.sin(v)

# 3Dプロット
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis')
ax.set_box_aspect([np.ptp(coord) for coord in [x, y, z]]) # 3つの軸の目盛を合わせる

# グラフを表示
plt.show()

※ $R$ と $r$ を変更すれば形状が変わります。

コメントを残す