0

我有以下代码用于在半径从 1 增加到 100 的不同高度平面中绘制 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

结尾

4

1 回答 1

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 之间的线性关系。

于 2013-10-02T21:53:16.860 回答