同时进行几个点的Matlab动画

时间:2016-03-23 01:41:50

标签: matlab animation plot simulation

我试图在Matlab上模拟2D中几个粒子的轨迹。我将这些粒子的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 

任何想法或建议都将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

以下是一个例子。

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之前添加了零。

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