求解包含时间的偏微分方程 (组) 将得到随着时间变化的数值结果, 把这样的数据制作成 gif
动画并结合到幻灯片中, 在毕业答辩、小组讨论、课堂教学等场合有着广泛的应用。生动的彩色 gif
动画具有很强的表现力, 令人刮目相看, 大大提高了报告人所讲述理论结果的直观性、生动性、观赏性。
生成 gif
动画主要用到
4
4
4 个函数: getframe
、frame2im
、rgb2ind
、imwrite
。
getframe
函数的一般调用形式为: F=getframe(h)
, 其作用是截取句柄为 h
的窗口内的一帧图像。
frame2im
函数的作用是把一帧截图转为图像数据。
rgb2ind
函数的作用是将 RGB
图像转换为索引图像, 一般调用形式为: [X, map]= rgb2ind(RGB,n)
。其中, X
、map
分别为转换后的图像数据和颜色表数据, RGB
为转换前的图像数据, n
指定 map
中的颜色数。
imwrite
函数的作用是将图像数据写入图像文件, 一般调用形式为: imwrite(X,map,filename,fmt,Param1,Val1,Param2,Val2...)
。其中, X
、map
意义同上, filename
为文件名, fmt
为文件格式,Param1
,Val1
,Param2
,Val2...
为若干可选参数及其取值。如:参数 LoopCount
为动画的循环播放次数, 这里设为 inf
, 即无穷大。参数 DelayTime
为每帧间隔时间, 单位秒。参数 WriteMode
为写入文件的模式, 有覆盖 overwrite
(默认) 和追加 append
两种选择。
生成 gif
动画的示例代码如下:
clear
clc
close
x=-1:0.02:1;y=x;
[X,Y]=meshgrid(x,y);
filename='test.gif';
for a=1:10
u=a*exp(-10*(X.^2+Y.^2));
mesh(x,y,u),axis([-1 1 -1 1 0 10]),drawnow
im=frame2im(getframe(gcf));
[A,map]=rgb2ind(im,256);
if a==1
%先以覆盖模式写入指定的gif文件
imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',0.1);
else
%再以追加模式将每一帧写入gif文件
imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',0.1);
end
end
运行代码之后在当前目录下生成 gif
文件, 该动画显示了一个三维高斯函数的峰值逐渐增大的过程。
本人水平有限, 若有不妥之处, 恳请批评指正.
作者邮箱: turingscat@126.com