【问题标题】:animating multiple body trajectories in octave以八度为多个身体轨迹设置动画
【发布时间】:2017-07-21 04:44:47
【问题描述】:

我知道 octave 中的 hold on; 命令允许我在同一个图中绘制多个轨迹。但是,我最近遇到了“彗星”功能。它在用户定义的时间范围内对系统状态进行动画处理。我只成功地将它用于一个简单的代码,它显示了一个小物体围绕一个固定的大物体的轨迹。如何使用“彗星”在同一时间范围内为 2 个物体的轨迹设置动画?

PS:如果你需要一个“彗星”如何工作的例子,这里是我上面提到的简单代码:

function xdot = f(x,t)
  G = 1.37;
  M = 10^5;
  [T,r] = cart2pol(x(1),x(2));
  xdot(3) = -((G*M)/((x(1)^2) + (x(2)^2)))*cos(T);
  xdot(4) = -((G*M)/((x(1)^2) + (x(2)^2)))*sin(T);
  xdot(1) = x(3);
  xdot(2) = x(4);
endfunction

X = lsode ("f", [1000,0,5,10],(t = linspace(0,1000,2000)'));
comet(X(:,1),X(:,2),0.01);

这基本上绘制了随时间变化的轨迹。您可以将粘贴复制到八度并查看动画。

谁能告诉我如何为 2 体或多体系统做同样的事情?

【问题讨论】:

    标签: animation octave


    【解决方案1】:

    你不能真正以这种方式使用彗星。您必须手动制作“动画”,但这并不难。另外,您可以获得更好的可定制性。这是一种方法。

    X1 = lsode ("f", [1000, 0, 5, 10], (t = linspace(0,1000,2000)'));
    X2 = lsode ("f", [500,  0, 4, 5 ], (t = linspace(0,1000,2000)'));
    x_low  = min ([X1(:, 1); X2(:, 1)]);    x_high = max ([X1(:, 1); X2(:, 1)]);
    y_low  = min ([X1(:, 2); X2(:, 2)]);    y_high = max ([X1(:, 2); X2(:, 2)]);
    
    for n = 1 : size (X1, 1)
      plot (X1(1:n, 1), X1(1:n, 2), ':', 'color', [0, 0.5, 1], 'linewidth', 2);
      hold on; 
      plot (X1(n, 1), X1(n, 2), 'o', 'markerfacecolor', 'g', 'markeredgecolor', 'k', 'markersize', 10);
      plot (X2(1:n, 1), X2(1:n, 2), ':', 'color', [1, 0.5, 0], 'linewidth', 2);
      plot (X2(n, 1), X2(n, 2), 'o', 'markerfacecolor', 'm', 'markeredgecolor', 'k', 'markersize', 10);
      hold off;   
      axis ([x_low, x_high, y_low, y_high]); % needed, otherwise first few plots will
                                             % use automatic axis limits
      drawnow; pause(0.01);
    end
    

    这是最直接的方法,但是如果刷新率比生成绘图的时间慢,它的速度可能没有0.01那么快;如果您只绘制一次并在每一步更改每个绘图对象的数据,则可以使其更快。

    此外,此“动画”只是用于在 内部 八度音程会话中进行可视化。如果您想从中生成视频文件,则必须生成图像并转换为电影/ gif 格式等。

    【讨论】:

    • 非常感谢。这对我来说看起来很棒。
    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多