【问题标题】:animate plot / trajectory in matlab / octavematlab / octave中的动画绘图/轨迹
【发布时间】:2013-05-10 13:27:30
【问题描述】:

我正在尝试使用 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

图片

【问题讨论】:

标签: matlab math animation 3d octave


【解决方案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

【讨论】:

  • Davin 这只是给我一个错误“第 0 行:所有 边缘未定义或超出范围,因此没有情节。”
  • @RickT,以前从未使用过八度,我在 Matlab 上执行它,大概是兼容性/版本问题。您可以尝试添加clear ... 行,或将plot3 替换为scatter3,也许会有帮助。如果没有,我的想法很新鲜。
【解决方案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

【讨论】:

【解决方案3】:

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

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

这使我更喜欢连续的轨迹动画,而不是离散的 * 序列。

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

% 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 重新加载它as it won't do this by default。您可以重新启动,或者更好地使用clear cometclear comet3。然后下次调用这些函数时,它们的定义将被刷新。

【讨论】:

    【解决方案4】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      相关资源
      最近更新 更多