执行animatedline命令同时为两条线设置动画

时间:2017-06-27 07:53:57

标签: matlab animation

这是this question的后续行动,其中我试图同时为两个功能设置动画。提供的解决方案实际上满足了要求,因此我接受了它作为最终答案。

然而,当我尝试为更现实的案例实现类似的东西时,我遇到了其他问题。以下代码的目的是:

  • 生成包含名为Stresses的递增(线性)变化应力值的3d矩阵。第一个索引用于递增变化值,第二个索引对应于Depth矩阵中的每个值,第三个索引对应于每个animatedline对象
  • 生成包含两行的名为Depth的二维矩阵。每行对应一个animatedline
  • 绘制动画线并同时制作动画

    %%PLOT AND ANIMATE
    nlines = 2
    h(1:nlines) = animatedline();
    
    axis([-2.1,2,-10,0]);
    
    for i = 1:100
        for j = 1:3
            Stresses(i,j,1) = (i/100)+j/3
            Stresses(i,j,2) = -(i/100)-j/3
        end
    end
    
    Depth = [0, -5, -10; 0,-6,-9]
    
    for i = 1:size(Stresses,1)
        for n = 1:nlines
            n
            currentStresses = Stresses(i,:,n)
            h(n).clearpoints();        
            h(n).addpoints(currentStresses, Depth(n,:));
            %pause(0.01) 
        end
        drawnow
    end
    

据我所知,这使用与previous问题类似的格式。包括pause语句会导致同时发生但" Choppy"绘图。不包括pause语句结果平滑,但"非同时"绘图。即它只绘制第二行。

我希望动画能够平滑并同时绘制两个animatedline个对象。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

对于同时绘图,您缺少hold功能。

close all
%%PLOT AND ANIMATE
nlines = 2;
% optional: so that you can distinguish between the two lines
colors = {'r','b'};
for n = 1:nlines
    h(n) = animatedline('color',colors{n});
end

axis([-2.1,2,-10,0]);

for i = 1:50
    for j = 1:3
        Stresses(i,j,1) = (i/100)+j/3;
        Stresses(i,j,2) = -(i/100)-j/3;
    end
end

Depth = [0, -5, -10; 0,-6,-9];

for i = 1:size(Stresses,1)
    for n = 1:nlines
        n;
        currentStresses = Stresses(i,:,n);
        h(n).clearpoints();        
        h(n).addpoints(currentStresses, Depth(n,:));
        % wait for another line
        hold on
    end
    % clear hold
    hold off
    drawnow
end

希望有所帮助!