我的任务是在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
这就是代码产生的内容:
我不明白问题所在。为什么它看起来不正确?
答案 0 :(得分:2)
你的行: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我有类似的东西:
并且您的参数与代码相同:
当你对数组元素vise进行除法和乘法时,也可以使用./
和.*
之类的运算符,而不需要为标量数组乘法/除法进行操作。