我在 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 则不需要这样做。
我的任务是在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 则不需要这样做。