Matlab 中错误的 3D 图

Wrong 3D plot in Matlab

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

x = cos(u) sinh(t) / (cosh(t) - cos(u));    
y = cos(u) sin(u) / (cosh(t) - cos(u));    
z = sin(u);

其中 u 和 t 都在 -pi 到 pi 之间变化。这就是 Paul Bourke 所说的 Ghost Plane

clc
clear
a = -pi:.01:pi;
b = -pi:.01:pi;
[U,T] = meshgrid(a,b);
X = (cos(U).*sinh(T))./(cosh(T)-cos(U));
Y = (cos(U).*sin(U))./(cosh(T)-cos(U));
Z = sin(U);
figure
surf(X,Y,Z)

有了代码,我得到了一些……难以形容的东西。如何绘制图形?

您的代码是正确的。您只需要放大即可。

一些提高可见度的提示:

  • 使用较少的精细网格,将 a = ...b = ... 更改为:linspace(-pi,pi,40);

  • 将此 ,'FaceColor','none','EdgeColor','interp'); 添加到 surf 命令以仅绘制线条和彩色线条。

  • surf 命令后添加此 axis equal vis3d;,这样轴将具有正确的缩放比例并且在旋转时表现良好。

  • 添加whitebg('black');grid off;使背景变黑

  • 更改为surf(X,Y,Z,-U,...);并添加colormap('HSV');,如果您想要与原始颜色相同的颜色。

  • set(gca,'xtick',[]); set(gca,'xticklabel',[]); set(gca,'yticklabel',[]); set(gca,'ytick',[]); 删除轴刻度

  • 您可能希望使用 cameratoolbar 来:将投影更改为 透视投影,完全缩小,将相机移入非常接近,以获得很好的透视扭曲。

瞧: