トーラスのPythonコード(媒介変数表示)
Pythonで媒介変数表示を利用してトーラスの3次元の図を出力してみよう。
説明
mpl_toolkits.mplot3d
モジュールのAxes3D
で3Dグラフを表示する。
トーラスの大円の半径と小円の半径をR
とr
とする。媒介変数u
とv
を $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$ を変更すれば形状が変わります。