几个点同时进行的Matlab动画

Matlab animation of several points simultaneously

我正在尝试在 Matlab 上模拟一些二维粒子的轨迹。我有这些粒子的 x 和 y 坐标作为时间的函数,我将其存储为矩阵 x 和 y。 x 和 y 中的列对应于时间,而行对应于粒子数:1、2 等

我知道如何为一个粒子做带停顿的动画,但我不知道如何为多个粒子的轨迹定制代码。基本上,我的想法是,在初始图上,我有 3 个标记对应于粒子的初始位置,比如粒子 A、B 和 C。然后,我想跟随这 3 个标记的移动,这里是我遇到问题的地方:我不知道如何根据粒子身份对后续点进行排序。例如,我想指定我在第二个时间点绘制的第一个点为粒子A,第二个点为粒子B,第三个点为粒子C。

我做过类似的事情,但是在我的模拟中,粒子的数量可能是 100,这使得创建 x1, x2, ..., x100, y1, y2, ..., y100 动画工作:

y = rand(3, 20); % Generate random sample data.
x = rand(size(y, 1), size(y, 2));
% Now we have x and y sample data and we can begin.
% Extract into separate arrays
x1 = sort(x(1,:));
x2 = sort(x(2,:));
x3 = sort(x(3,:));
y1 = y(1,:);
y2 = y(2,:);
y3 = y(3,:);
for k = 1 : length(x1)
    plot(x1(1:k), y1(1:k), 'r*-', 'LineWidth', 2);
    xlim([min(x(:)), max(x(:))]);
    ylim([min(y(:)), max(y(:))]);
    grid on;
    hold on;
    plot(x2(1:k), y2(1:k), 'g*-', 'LineWidth', 2);
    plot(x3(1:k), y3(1:k), 'b*-', 'LineWidth', 2);
    hold off;
    fprintf('Plotted points 1 through %d\n', k);
    pause(0.8); 
end 

如有任何想法或建议,我们将不胜感激!

为了一次绘制所有图形,我们可能会制作一个二维数组。

下面是一个例子。

y = rand(3, 20); % Generate random sample data.
x = rand(size(y, 1), size(y, 2));
% Now we have x and y sample data and we can begin.
% Extract into separate arrays
x = sort(x');
y=y';

M=size(x);
N=M(2);

for k = 1 : length(x)
    if k==1;

         zeroPad=zeros(1,N);
         x0=[zeroPad;x(1,1:N)];
         y0=[zeroPad;y(1,1:N)];
         plot(x0(1:2,1:N), y0(1:2,1:N), '*', 'LineWidth', 2);

    else
         plot(x(1:k,1:N), y(1:k,1:N), '*-', 'LineWidth', 2); 

    end
    xlim([min(x(:)), max(x(:))]);
    ylim([min(y(:)), max(y(:))]);

    grid on;
    fprintf('Plotted points 1 through %d\n', k);
    pause(0.8); 
end 

增加了一个技巧。

在第一次迭代中,我在 x 和 y 之前添加了零。

删除了一些不必要的代码。