我有一个双重的问题:
如果有人可以告诉我如何在此处缩小图像,请执行=)
最佳答案
解决您的第一个问题:首先,您需要在环形坐标中定义圆环的坐标(似乎很自然!),然后转换为笛卡尔坐标,这就是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
我们只需要一个圆环的表面,所以次半径是一个标量。现在,我们对这些坐标进行2D网格划分:
[t, p] = meshgrid(phi, theta);
并使用问题中链接到的Wikipedia页面上给出的公式转换为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
编辑:要解决第二个问题,这取决于您如何存储变形,但是要说您在每个圆弧和极点定义了一个矩阵,则只需将较小半径的常数乘以变形即可。在下面的代码中,我创建一个失真矩阵,该矩阵的尺寸与我的环面和极坐标角坐标矩阵的尺寸相同,并且通常以1的平均值分布,FWHM为0.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)
其结果是: