最初の質問への対処: まず、トーラスの座標をトロイダル座標で定義する必要があります (自然に思えます!)。次に、デカルト座標に変換します。これは、MATLAB がすべてのプロットが構築されることを期待する方法です (極座標プロットを作成していない限り、もちろん)。したがって、トロイダル座標を定義することから始めます。
aminor = 1.; % Torus minor radius
Rmajor = 3.; % Torus major radius
theta = linspace(-pi, pi, 64) ; % Poloidal angle
phi = linspace(0., 2.*pi, 64) ; % Toroidal angle
トーラスの 1 つの面だけが必要なので、短半径はスカラーです。これらの座標の 2D メッシュを作成します。
[t, p] = meshgrid(phi, theta);
質問にリンクされているウィキペディアのページにある式を使用して、3Dデカルト座標に変換します。
x = (Rmajor + aminor.*cos(p)) .* cos(t);
y = (Rmajor + aminor.*cos(p)) .* sin(t);
z = aminor.*sin(p);
これでトーラスが 3D で定義されたので、次を使用してプロットできますsurf
。
surf(x, y, z)
axis equal
編集:2番目の質問に対処するには、歪みをどのように保存するかによって異なりますが、各トロイダルポイントとポロイダルポイントで定義された行列があるとします。マイナー半径である定数に歪みを掛けるだけです。以下では、トロイダルおよびポロイダル角度座標行列と同じ次元であり、FWHM 0.1 で平均 1 付近に正規分布する歪み行列を作成します。
distortion = 1. + 0.1 * randn(64, 64);
x = (Rmajor + aminor .* distortion .*cos(p)) .* cos(t);
y = (Rmajor + aminor .* distortion .* cos(p)) .* sin(t);
z = aminor.* distortion .* sin(p);
surf(x, y, z)
その結果は次のとおりです。