1、1 1Matlab 制作制作动画画2 2涉及的主要问题一般步骤使用的主要函数及功能示例程序及运行结果存在的问题3 3一般步骤:一般步骤:确定动画的帧数确定动画的帧数nframes画出图形画出图形为为nframes帧幅图形分配足够内存空间帧幅图形分配足够内存空间用用getframe生成动画的数据矩阵生成动画的数据矩阵以每秒以每秒n幅的速度播放动画幅的速度播放动画4 4函数及功能M=moviein(nframes)为nframes帧幅图分配足够内存空间movie(n)以每秒n幅的速度播放动画 getframe 对当前的图象进行快照,截取一幅画面信息(称为动画中的一帧),一幅画面信息形成一个很大的列
2、向量meshgrid:用于产生x-y平面上的网格数据mesh:绘制网面图5 5函数及功能imwrite():将数据转换成图像文件 surf:画立体曲面图peaks:生成一个凹凸有致的曲面figure:创建一个数字图形图像aviobj=avifile(filename,PropertyName,value,.)AVIFILE returns a handle to an AVI file object,aviobj.mov=aviread(filename,index)reads the AVI movie filename into the MATLAB movie structure mov
3、 6 6保存动画生成avi格式的电影文件创建电影剪辑文件,并存储起来:aviobj=avifile(文件名.avi,fps,3);%定义一个avi文件,%AVIOBJ=AVIFILE(FILENAME,PropertyName,VALUE,PropertyName,VALUE,.)%各属性详细说明见matlab帮助for i=1:n%在当前窗体上生成一帧图像frame=getframe(gca);%获得一帧图像aviobj=addframe(aviobj,frame);%并加到电影剪辑文件中endaviobj=close(aviobj);%关闭文件,结束数值仿真模拟过程。7 7保存动画生成av
4、i格式的电影文件直接利用函数movie2avimovie2avi(mov,filename.avi)mov由getframe获得,生成文件名为filename.avi的视频文件一般格式:for i=1:n figure(i)F(i)=getframe;end;movie2avi(F,.filename.avi)8 8保存动画直接保存gif动画一般步骤:m(:,k)=getframe;%构造gif图像的帧,nn(:,:,:)=getframe;%转换为可以直接输出的格式%如果要制作彩色的图像,你只能把生成的彩色图像单独制作(使用其他软件)nn1=nn.cdata;nn1=rgb2gray(nn1
5、);imwrite(nn1,out.gif,gif,WriteMode,append)9 9画sinx,cosx图形二维动画三维动画1010画sinx,cosx图形x=0:0.5:360*pi/180;plot(x,sin(x),x,cos(x)二维动画 x=-pi:pi/30:pi;h=plot(x,cos(x),o,MarkerEdgeColor,k,MarkerFaceColor,r,MarkerSize,8,EraseMode,Xor)for j=1:3000 y=sin(3*x+0.006*j);set(h,ydata,y);drawnow;end 1111播放动画二维动画 s=0.
6、2;x1=0;%确定起始点横坐标x1及其增量 nframes=50;%确定动画总帧数 for k=1:nframes x1=x1+s;%确定画图时横坐标终止值x1 x=0:0.01:x1;y=sin(x);plot(x,y);%在x=0 x1作y=sin(x)曲线 axis(0 2*pi-1 1)%定义坐标轴范围 grid off%不显示网格线 M(k)=getframe;%将当前图形存入矩阵M(k)end movie(M,3)%重复3次播放动画M 1212保存动画的示例1三维动画x,y,z=peaks(30);%peaks产生一个凹凸有致的曲面 surf(x,y,z)%用X和Y定义x-y坐标
7、网格,Z定义网格上每一点的高度,来生成三维曲面三维曲面 axis(-3 3-3 3-10 10)m=moviein(15);for i=1:15 view(-37.5+24*(i-1),30)m(:,i)=getframe;end movie(m)movie2avi(m,out.avi)1313保存动画的示例2function avimakewarning off;load data /data是已有的文件M,N,K=size(data);data=data/(max(abs(data(:);aviobj=avifile(mymovie.avi,fps,10);for kk=1:10:K im
8、agesc(data(:,:,kk);set(gca,clim,-1 1);colormap(hsv(128)frame=getframe(gca);aviobj=addframe(aviobj,frame);endaviobj=close(aviobj);1414其它转换gif动画的方法直接作gif动画的软件较多,比如Ulead GIF Animator,批量格式转换用XnView 1515其它动画示例程序Z=peaks;surf(Z)axis tightset(gca,nextplot,replacechildren);for j=1:50 surf(sin(2*pi*j/20)*Z,Z)
9、F(j)=getframe;endmovie(F,20)1616其它动画示例程序clear;clc;x,y=meshgrid(-8:.1:8);for j=1:20f=(x,y)(sin(sqrt(11-j)*(x.2+y.2)./sqrt(11-j)*(x.2+y.2)+eps);z=f(x,y);surf(x,y,z);shading interp;M(j)=getframe;if j=1 I,map=rgb2ind(M(j).cdata,256);imwrite(I,map,out.gif,DelayTime,.1)else imwrite(rgb2ind(M(j).cdata,map),map,out.gif,WriteMode,append,DelayTime,.1)end end movie2avi(M,out.avi)