Animation 在倍频程中设置多个身体轨迹的动画
我知道Animation 在倍频程中设置多个身体轨迹的动画,animation,octave,Animation,Octave,我知道等一下命令允许我在同一个图形中绘制多个轨迹。但是,我最近遇到了函数“comet”。它在用户定义的时间范围内设置系统状态的动画。我只成功地将其用于一个简单的代码,该代码显示了一个小物体围绕一个固定的大物体的轨迹。如何使用“comet”在同一时间范围内为两个物体的轨迹设置动画 PS:如果您需要“comet”如何工作的示例,下面是我上面提到的简单代码: function xdot = f(x,t) G = 1.37; M = 10^5; [T,r] = cart2pol(x(1),x
等一下命令允许我在同一个图形中绘制多个轨迹。但是,我最近遇到了函数“comet”。它在用户定义的时间范围内设置系统状态的动画。我只成功地将其用于一个简单的代码,该代码显示了一个小物体围绕一个固定的大物体的轨迹。如何使用“comet”在同一时间范围内为两个物体的轨迹设置动画
PS:如果您需要“comet”如何工作的示例,下面是我上面提到的简单代码:
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体或多体系统做同样的事情吗?你不能用那种方式使用comet。你必须手动制作“动画”,但这并不难。此外,您还可以获得更好的可定制性。这里有一种方法
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格式等
非常感谢。我觉得这很好。