gpt4 book ai didi

matlab - 在 Matlab 中可视化环形曲面

转载 作者:太空宇宙 更新时间:2023-11-03 19:31:45 25 4
gpt4 key购买 nike

我有一个双重问题:

  1. 如何在 MATLAB 中绘制一个环形曲面,给定一个大半径 R 和一个小半径 a?为避免混淆,它是 toroidal/poloidal coordinate system ,如下图所示,我正在谈论。 Toroidal coordinate system

  2. 现在,在这个表面上的任何一点 (phi, theta) 中,小半径都会被我存储在矩阵中的某个值扭曲。我如何绘制这个扭曲的表面?一旦我得到第 1 部分的答案,这可能很容易,但这是我的实际目标,因此任何无法处理第 1 部分的解决方案对我来说都是毫无用处的。

如果有人能告诉我如何让图片在这里显得更小,请做 =)

最佳答案

解决您的第一个问题:首先您需要在环面坐标中定义圆环的坐标(看起来很自然!),然后转换为笛卡尔坐标,这是 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

我们只需要圆环体的单个表面,因此小半径是一个标量。我们现在制作这些坐标的二维网格:

[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

Proof!

编辑:要解决你的第二个问题,这取决于你如何存储你的扭曲,但是假设你在每个环形和极向点上定义了一个矩阵,你只需要乘以常数是畸变的小半径。在下文中,我创建了一个失真矩阵,它与我的环形和极向角坐标矩阵具有相同的维度,并且正态分布在平均值为 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)

结果是:

enter image description here

关于matlab - 在 Matlab 中可视化环形曲面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10655393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com