matlab使用plot绘制动画及其制作avi视频文件

昨晚帮一个在日本读博的女学霸做的,感觉蛮有意思的。出于保留学习点点滴滴的目的,记录下过程。

保密的关系,生成数据的程序不能放上,只能展示下数据的结构:

动画的每帧是每次生成的数据绘制成的二维图,为了方便,我们把所有的数据存储到了一个X和Y中,如下图所示:

1 绘图

for a=1:80
clf
    for it=1:12
        plot(X(a,((it-1)*12+1):it*12),Y(a,((it-1)*12+1):it*12))
        hold on
        plot(X(a,it:12:end),Y(a,it:12:end))
        hold on
        if (it<=2)
            plot(X(a,it:13:end),Y(a,it:13:end))
            hold on
        else
            plot(X(a,it:13:end-13*(it-2)),Y(a,3:13:end-13*(it-2)))
            hold on
        end
        plot(X(a,(12*it+1):13:end),Y(a,(12*it+1):13:end))
        hold on
        if it>=2
            plot(X(a,it:11:end-13*(12-it)),Y(a,it:11:end-13*(12-it)))
            hold on
        end
        plot(X(a,12*it:11:end),Y(a,12*it:11:end))
        hold on    
    end
    axis([-2 13 -1 13])
    
    pause(0.1);
    drawnow;  
end

可惜不能放视频。。。截图:

根据动画,可以看出数据的变化情况。

2 avi视频

aviobj=VideoWriter('xiaoxiao.avi');
open(aviobj);
for a=1:80
clf
    for it=1:12
        plot(X(a,((it-1)*12+1):it*12),Y(a,((it-1)*12+1):it*12))
        hold on
        plot(X(a,it:12:end),Y(a,it:12:end))
        hold on
        if (it<=2)
            plot(X(a,it:13:end),Y(a,it:13:end))
            hold on
        else
            plot(X(a,it:13:end-13*(it-2)),Y(a,3:13:end-13*(it-2)))
            hold on
        end
        plot(X(a,(12*it+1):13:end),Y(a,(12*it+1):13:end))
        hold on
        if it>=2
            plot(X(a,it:11:end-13*(12-it)),Y(a,it:11:end-13*(12-it)))
            hold on
        end
        plot(X(a,12*it:11:end),Y(a,12*it:11:end))
        hold on    
    end
    axis([-2 13 -1 13])
    
    pause(0.1);
    drawnow;
    currFrame = getframe;
    writeVideo(aviobj,currFrame);
end
close(aviobj); %关闭

猜你喜欢

转载自blog.csdn.net/qq_27806947/article/details/86799264