我在 Matlab 中绘制的 3D 贝壳有什么问题?

What's wrong with my plot of a 3D seashell in Matlab?

我的任务是在Matlab中画这样的贝壳。

它应该是这样的:

我的密码是

s = linspace(0,2*pi);
t = linspace(0,2*pi);
[s, t] = meshgrid(s, t); 
n=2;
a=15;
b=500;
c=10;
X =a.*(1-(t./(2*pi))).*cos(n.*t).*(1+cos(s))+c.*cos(n.*t);
Y =a.*(1-(t./(2*pi))).*sin(n.*t).*(1+cos(s))+c.*sin(n.*t);
Z = b.*(t./(2*pi))+a.*(1-(t./2*pi)).*sin(s);
surf(X,Y,Z ,'LineStyle','none','FaceLighting','phong','EdgeColor','none')
colormap(jet)
camlight right

这就是代码生成的结果:

我不明白这是什么问题。为什么看起来不对?

你的行:Z = b.*(t./(2*pi))+a.*(1-(t./2*pi)).*sin(s);有一个代数错误。 它应该是:Z = b*(t/(2*pi))+a*(1-(t/(2*pi))).*sin(s); 通过你的参数化我得到了这个结果:

并使用不同的参数化发现 here 我得到了类似的东西: 和您的参数相同的代码: 当您对数组元素进行除法和乘法时,也可以使用 ./.* 等运算符,而对于标量数组 multiplication/division 则不需要这样做。