5

我正在尝试使用 matlab / octave 为这个螺旋设置动画我希望它向上或向下螺旋

t = 0:0.1:10*pi;
r = linspace (0, 1, numel (t));
z = linspace (0, 1, numel (t));
plot3 (r.*sin(t), r.*cos(t), z);

螺旋

我尝试使用 for 循环对其进行动画处理,但这只是给了我一个锥形,请参见下面的代码和图像

clear all, clc,clf,tic
t = 0:0.1:10*pi;
r = linspace (0, 1, numel (t));
z = linspace (0, 1, numel (t));

for ii=1:length(r)
    ii
    plot3 (r.*sin(t(ii)), r.*cos(t(ii)), z);
    hold on
    %pause (.00001)
end

图片在此处输入图像描述

4

4 回答 4

3

您还可以使用该comet3()包,它通过情节动画轨迹:

delay = 0.001  % seconds
figure
comet3(r.*sin(t), r.*cos(t), z, delay);

这动画了一个连续的轨迹,我更喜欢离散的 * 序列。

一个缺点是Octave 3.6.4 附带的版本很慢,无论您​​使用什么延迟cometcomet3但这可以通过在这个 SO question 中使用 andyras提供的以下技巧来克服:

% plot the first point to get started
h = plot3(x(1),y(1),z(1),"b");
axis([min(x), max(x), min(y), max(y), min(z), max(z)]);

% refresh the plot in a loop through the rest of the data
for k = 1:length(z);
   set(h, 'XData', x(1:k));
   set(h, 'YData', y(1:k));
   set(h, 'ZData', z(1:k));
   pause (0.001); % delay in seconds
       % alternatively could provide a velocity function
       % pause(sqrt(vx(k)^2+vy(k)^2+vz(k)^2));  
endfor

小提示:一旦你修改了函数,你需要强制 Octave 重新加载它,因为默认情况下它不会这样做。您可以重新启动,或者更好地使用clear cometand clear comet3。然后下次调用这些函数时,它们的定义将被刷新。

于 2013-07-21T14:21:36.163 回答
2

以下似乎适用于 Octave 3.6.2

t = 0:0.1:10*pi;
r = linspace (0, 1, numel (t));
z = linspace (0, 1, numel (t));

figure
axis([-1 1 -1 1 0 1])
hold on

for ii=1:length(r)
    plot3 (r(ii)*sin(t(ii)), r(ii)*cos(t(ii)), z(ii),'*');
    pause (.001)
end
于 2013-05-16T08:00:58.517 回答
1

当然不是最漂亮的,但这些是您需要对代码进行的第一次更改,以便它做一些接近您想要的事情。

t = 0:0.1:10*pi;
z = linspace (1, 0, numel (t));
for ii=1:length(t)
    plot3 (z(ii)*sin(t(ii)),z(ii)*cos(t(ii)), z(ii));
    hold on
    pause (.00001)
end
于 2013-05-15T20:55:28.103 回答
0

这不是轨迹解决方案,而是旋转的龙卷风。

phi = linspace(0, 10*pi, 300);
r = linspace (0, 1, 300);
z = linspace (0, 1, 300);
s = 100; %speed of turning
for t = 0:0.01:10 %t is time
  plot3 (r.*sin(phi+t*s), r.*cos(phi+t*s), z);
  pause(0.01)
end
于 2020-07-18T17:46:56.560 回答