MATLAB绘制动画(四)AVI与GIF
clc;
clear;
close all;
fig = figure ;
aviobj = avifile('example.avi');
n = 100;
t = 0:2*pi/n:2*pi;
x = cos(t);
y = sin(t);
for k = 1:n
x(k) = cos(t(k));
y(k) = sin(t(k));
H = plot(x,y,x(k),y(k),'or',x(k),-y(k),'ob');
axis equal
grid on
MOV = getframe(fig);
aviobj = addframe(aviobj,MOV);
end
close(fig)
aviobj = close(aviobj)
以上代码报错:
函数或变量 'avifile' 无法识别。
函数或变量 'addframe' 无法识别。
这是因为新版的MATLAB中没有avifile这个函数,也没有addframe
以下是替换代码:
clc;
clear;
close all;
fig = figure ;
aviobj = VideoWriter('example.avi');
n = 100;
t = 0:2*pi/n:2*pi;
x = cos(t);
y = sin(t);
for k = 1:n
x(k) = cos(t(k));
y(k) = sin(t(k));
H = plot(x,y,x(k),y(k),'or',x(k),-y(k),'ob');
axis equal
grid on
MOV(:,k) = getframe(fig);
end
%movie(MOV)
close(fig)
open(aviobj);
writeVideo(aviobj,MOV);
close(aviobj)
就能在工作文件夹下看到输出的avi文件,如下:
简单来说,生成avi文件的原理是,在图窗上一次次绘制图形,并通过getframe将每一次绘制的图形储存在一个特殊矩阵中(在上述代码中是MOV矩阵)
之后,我们通过VideoWriter新建一个avi文件(注意此时还没有内容)并用aviobj代表文件
open(aviobj)打开这个avi文件
writeVideo(aviobj,MOV)将我们储存的图像矩阵存储到这个avi文件中
close(aviobj)关闭avi文件
这样,我们就得到了一个avi视频文件
参考《高等光学仿真——光波导、激光》