资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Matlab 制作动画 1 涉及的主要问题 o一般步骤 o使用的主要函数及功能 o示例程序及运行结果 o存在的问题 2 一般步骤: o确定动画的帧数nframes o画出图形 o为nframes帧幅图形分配足够内存空间 o用getframe生成动画的数据矩阵 o以每秒n幅的速度播放动画 3 函数及功能 oM=moviein(nframes) n为nframes帧幅图分配足够内存空间 omovie(n) n以每秒n幅的速度播放动画 ogetframe n对当前的图象进行快照,截取一幅画面信息(称为动画中 的一帧),一幅画面信息形成一个很大的列向量 omeshgrid:用于产生x-y平面上的网格数据 omesh:绘制网面图 4 函数及功能 oimwrite():将数据转换成图像文件 osurf:画立体曲面图 opeaks:生成一个凹凸有致的曲面 ofigure:创建一个数字图形图像 oaviobj = avifile(filename,PropertyName,value,.) nAVIFILE returns a handle to an AVI file object, aviobj. o mov = aviread(filename,index) reads the AVI movie filename into the MATLAB movie structure mov 5 保存动画生成avi格式的电影文件 o创建电影剪辑文件,并存储起来: naviobj=avifile(文件名.avi,fps,3);%定义一个avi文件, %AVIOBJ = AVIFILE(FILENAME,PropertyName,VALUE,Property Name,VALUE,.)%各属性详细说明见matlab帮助 nfor i=1:n %在当前窗体上生成一帧图像 frame=getframe(gca); %获得一帧图像 aviobj=addframe(aviobj,frame);%并加到电影剪辑文件中 end aviobj=close(aviobj);%关闭文件,结束数值仿真模拟过程。 6 保存动画生成avi格式的电影文件 o直接利用函数movie2avi nmovie2avi(mov,filename.avi) nmov由getframe获得,生成文件名为filename.avi的视频文 件 o一般格式: for i=1:n figure(i) F(i)=getframe; end; movie2avi(F,.filename.avi) o 7 保存动画直接保存gif动画 o一般步骤: m(:,k)=getframe; %构造gif图像的帧, nn(:,:,:)=getframe; %转换为可以直接输出的格式 %如果要制作彩色的图像,你只能把生成的彩色图像单独 制作(使用其他软件) nn1=nn.cdata; nn1=rgb2gray(nn1); imwrite(nn1,out.gif,gif,WriteMode,append) o 8 o画sinx,cosx图形 o二维动画 o三维动画 9 o画sinx,cosx图形 nx=0:0.5:360*pi/180;plot(x,sin(x),x,cos(x) o二维动画 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 o 10 播放动画 o二维动画 s =0.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 11 保存动画的示例1 o三维动画 x,y,z=peaks(30); %peaks产生一个凹凸有致的曲面 surf(x,y,z) %用X和Y定义x-y坐标网格,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) o 12 保存动画的示例2 ofunction avimake owarning off; oload data /data是已有的文件 oM,N,K=size(data); odata=data/(max(abs(data(:); oaviobj = avifile(mymovie.avi,fps,10); ofor kk=1:10:K o imagesc(data(:,:,kk); o set(gca,clim,-1 1); o colormap(hsv(128) o frame = getframe(gca); o aviobj = addframe(aviobj,frame); oend oaviobj = close(aviobj); 13 其它转换gif动画的方法 o直接作gif动画的软件较多,比如Ulead GIF Animator,批量格式转换用XnView 14 其它动画示例程序 Z = peaks; surf(Z) axis tight set(gca,nextplot,replacechildren); for j = 1:50 surf(sin(2*pi*j/20)*Z,Z) F(j) = getframe; end movie(F,20) 15 其它动画示例程序 clear;clc; x,y=meshgrid(-8:.1:8); for j=1:20 f=(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,Delay Time,.1) end end movie2avi(M,out.avi) 16
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号