gpt4 book ai didi

matlab - Matlab 中的这个 3D 图有什么问题

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

我正在尝试在 Matlab 中创建 3D 绘图,但我几乎没有任何经验。我真的很想绘制这些方程描述的图形:

x = cos(u)*(2 + cos(v))
y = sin(u)*(2 + cos(v))
z = x^2 - y^2 + 2*x*y*tan^2(v)
-pi <= u <= pi, -pi <= v <= pi

哪个剧情本来应该是这样的


(来源:paulbourke.net)

我尽了最大的努力并想出了:

% volume data
u = linspace(-pi,pi,40);
v = linspace(-pi,pi,40);
[u, v] = meshgrid(u, v);
X =cos(u).*(2 + cos(v));
Y =sin(u).*(2 + cos(v));
Z =(X.^2)-(Y.^2)+(X.*Y.*2.*((tan(v)).^2));
surf(X,Y,Z,'FaceColor','none','EdgeColor','interp')

%shaded surface
colormap(jet)
camlight right

我得到以下信息:

怎么了?

最佳答案

您的图表实际上没有任何问题。您之所以会看到这样的图表,是因为 z 轴太大了。实际定义其大部分形状的 z 值比该图中看到的最高值小几个数量级……大约几千。之所以是因为当uv的值为+/- pi/2时,tan是未定义,这就是为什么当您倾向于这些角度时高度会如此之高。

我的一个建议是,如果 z 值太大,则对其进行裁剪。在 z 值上设置某种阈值并裁剪它们。像 100 表示高正值,-100 表示大负值。此外,调整视角以获得更好的 View ,我还建议增加点数,以便更好地插值阴影......大约 1000。要获得更光滑的效果,请尝试更改 FaceColor 属性设置为 interp 而不是 none

因此:

u = linspace(-pi,pi,1000); %// Define 1000 points per dimension
v = linspace(-pi,pi,1000);
[u, v] = meshgrid(u, v);
X =cos(u).*(2 + cos(v));
Y =sin(u).*(2 + cos(v));
Z =(X.^2)-(Y.^2)+(2*X.*Y.*(tan(v).^2));
Z(Z <= -100) = -100; %// Enforce threshold
Z(Z >= 100) = 100;
surf(X,Y,Z,'FaceColor','interp','EdgeColor','interp')

%shaded surface
colormap(jet)
view(30,50); %// Change viewing angle
camlight right

我明白了:

enter image description here

关于matlab - Matlab 中的这个 3D 图有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28750008/

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