MATLAB 制作gif动态图的基本思想就是,将一张张的静态图组合成一张能动的gif图片,并保存到相应的位置。
那么,要想制作一张动态图,首先要有若干个静态图,并且他们的索引值是连续的。下面先说一下matlab关于静态图的绘制及其保存。
1、MATLAB静态图绘制及保存
下面以一个sin函数为例进行说明。实例是这样的:有一个运动轨迹sin(t),t=0:30。现在有一个小球去跟踪这个sin曲线。
(1)首先画出y=sin(t)的图像:
m语言:
t=1:0.1:30;
y=sin(t);
plot(t,y);
grid on
得到如下图像:
接下来要定义一个小球去跟踪上面的曲线,并将跟踪过程中生成的图片保存到当前工作路径下的image文件夹下:
%迭代值
i=0;
%设置小球属性,横坐标数据为'xdata',纵坐标数据为'ydata',红色,大小为30
h = line('xdata',[],'ydata',[],'color','r','marker','.','markersize',30);
for ii=1:length(y)
%跟踪上述曲线
set(h,'xdata',t(ii),'ydata',y(ii));
%建立新图像
figure();
%绘制
drawnow
%可认为是小球一定速度
pause(0.1)
hold on
i=i+1;
%保存图片,位置为:/image,名称为i.bmp
print(1,'-dbmp',sprintf('image/%d',i))
%关闭figure()
close;
end
由此变生成了0.bmp~291.bmp共291张图片,并保存在当前工作路径下的image文件夹下,如下图所示。
2、生成gif图片
根据上述操作,我们得到了名为0-291.bmp的图片。接下来要根据这291张图片制作一张gif图片。
%依次读取生成的所有图片
for j=1:length(y)
%获取当前图片
A=imread(sprintf('image/%d.bmp',j));
[I,map]=rgb2ind(A,256);
%生成gif,并保存
if(j==1)
imwrite(I,map,'movefig.gif','DelayTime',0.1,'LoopCount',Inf)
else
imwrite(I,map,'movefig.gif','WriteMode','append','DelayTime',0.1)
end
end
最后生成的gif图片如下: