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

最適化については、これを試してください - これは最高に速いと思います (オクターブと 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 に答える