我有以下代码用于在不同高度平面中绘制100个圆,其中半径从1增加到100.
for r=1:1:100
t=linspace(0,2*pi);
x=r*cos(t);
y=r*sin(t);
for h=100:100:10000
z = 100 * r * ones(1, length(t));
plot3(x,y,z);
if r == 1 && h == 100
hold on;
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
end
drawnow;
end
端
像这样:
问题
现在我想更改代码以使半径减小从100变为1,即将圆锥体颠倒。所以代码应该像这样阅读,但我不能让它工作:
for r=100:1:1
t=linspace(0,2*pi);
x=r*cos(t);
y=r*sin(t);
for h=100:100:10000
z = 100 * r * ones(1, length(t));
plot3(x,y,z);
if r == 100 && h == 100
hold on;
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
end
drawnow;
end
端
答案 0 :(得分:1)
你几乎做对了。试试这个:
for r=100:-1:1
语法如下:
for i=istart:istride:iend
对于优化尝试这个 - 我认为这是最快的(尝试使用octave和gnuplot)。我认为现在脚本可以正常工作; - ):
t=linspace(0,2*pi); % the array t doesnt get changed during for r=...
z = ones(1, length(t)); % same here: one preallocation should do the job
for r=100:-1:1
x=r*cos(t);
y=r*sin(t);
z(:) = 10000-r*100;
plot3(x,y,z);
if r == 100
hold on;
end
drawnow;
end
set(gcf, 'units','normalized','outerposition',[0 0 1 1]); %I think this is the most expesive operation.
hold off
问题是,你没有假设z和r之间存在线性关系。