MATLAB动画图作动态图_第1页
MATLAB动画图作动态图_第2页
MATLAB动画图作动态图_第3页
MATLAB动画图作动态图_第4页
MATLAB动画图作动态图_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MATLAB技术论坛电子期刊编辑:xiezhh制作:MATLAB技术论坛版权:MatlabSky版权所有网址: HYPERLINK / 第1期2010.09No.1中国权威MATLAB论坛核心期刊MATLAB技术论坛简介目 录 HYPERLINK /view/1/ l _Toc270679116#_Toc270679116 1 动画的制作. 1 HYPERLINK /view/1/ l _Toc270679117#_Toc270679117 1.1 电影动画. 1 HYPERLINK /view/1/ l _Toc270679118#_Toc270679118 1.1.1 电影动画演示实例(一

2、)千变万化的线条. 2 HYPERLINK /view/1/ l _Toc270679119#_Toc270679119 1.1.2 电影动画演示实例(二)跳动的红心. 2 HYPERLINK /view/1/ l _Toc270679120#_Toc270679120 1.2 擦除动画. 3 HYPERLINK /view/1/ l _Toc270679121#_Toc270679121 1.2.1 Matlab擦除重绘动画实例(一)运动的小球. 4 HYPERLINK /view/1/ l _Toc270679122#_Toc270679122 1.2.2 Matlab擦除重绘动画实例(二

3、)单摆横梁. 5 HYPERLINK /view/1/ l _Toc270679123#_Toc270679123 1.2.3 Matlab擦除重绘动画实例(三)时钟演示. 5 HYPERLINK /view/1/ l _Toc270679124#_Toc270679124 1.2.4 Matlab擦除重绘动画实例(四)小球绕跑道运动. 7 HYPERLINK /view/1/ l _Toc270679125#_Toc270679125 1.3 质点动画. 8 HYPERLINK /view/1/ l _Toc270679126#_Toc270679126 1.3.1 质点动画演示(一) 8

4、HYPERLINK /view/1/ l _Toc270679127#_Toc270679127 1.3.2 质点动画演示(二)平抛运动. 8 HYPERLINK /view/1/ l _Toc270679128#_Toc270679128 1.3.3 质点动画演示(三)导弹发射. 9 HYPERLINK /view/1/ l _Toc270679129#_Toc270679129 1.4 霓虹灯效果动画. 9 HYPERLINK /view/1/ l _Toc270679130#_Toc270679130 1.4.1 霓虹灯效果动画实例(一) 霓虹闪烁的球体. 9 HYPERLINK /vi

5、ew/1/ l _Toc270679131#_Toc270679131 1.4.2 霓虹灯效果动画实例(二) 一颗花心. 9 HYPERLINK /view/1/ l _Toc270679132#_Toc270679132 1.5 GIF格式动画制作. 10 HYPERLINK /view/1/ l _Toc270679133#_Toc270679133 1.5.1 GIF格式动画制作案例绕螺旋线运动的小球. 10 HYPERLINK /view/1/ l _Toc270679134#_Toc270679134 2 动画的保存. 10 HYPERLINK /view/1/ l _Toc2706

6、79135#_Toc270679135 3 有关动画制作的实验报告. 11 HYPERLINK /view/1/ l _Toc270679136#_Toc270679136 4 更多动画实例. 14 HYPERLINK /view/1/ l _Toc270679137#_Toc270679137 4.1 电影动画演示旋转的山峰. 14 HYPERLINK /view/1/ l _Toc270679138#_Toc270679138 4.2 擦除动画实例卫星绕地球运动(注释很详细) 14 HYPERLINK /view/1/ l _Toc270679139#_Toc270679139 4.3 擦

7、除动画实例太阳地球月亮卫星,绕转演示动画(注释很详细) 15 HYPERLINK /view/1/ l _Toc270679140#_Toc270679140 5 光学夫朗和费衍射现象模拟Matlab源代码. 16 HYPERLINK /view/1/ l _Toc270679141#_Toc270679141 6 牛顿环动画演示Matlab源代码. 18 HYPERLINK /view/1/ l _Toc270679142#_Toc270679142 7 使用MATLAB绘制原子轨道和电子云图形. 19 HYPERLINK /view/1/ l _Toc270679143#_Toc27067

8、9143 8 振动摆MATLAB动画源代码. 19MATLAB基础应用版块Matlab中动画的实现、制作和保存 HYPERLINK /thread-592-1-1.html /thread-592-1-1.htmlMatlab的确是一个很优秀的工程计算软件,除了强大的矩阵运算,仿真分析外,绘图功能也是相当的强大。但是由于Matlab本身的多线程编程缺陷(所谓多线程,就是MATLAB没法同时执行多个回调,只能排队一个一个的按顺序运行,Timer对象除外,它是MATLAB中唯一能够执行多线程的方法),想要动态的画图,并且能够很好的在GUI中得到控制,还不是一件很容易的事情。但是动画具有生动形象直观

9、的好处,对我的教学、研究等都有不小的作用。那好,我在这里勉为其难的介绍下Matlab中是如何制作动画的。1 动画的制作Matlab中动画实现的方法主要有下面三种1.1 电影动画 帖子地址: HYPERLINK /thread-593-1-1.html /thread-593-1-1.html从不同的视角拍下一系列对象的图形,并保存到变量中,然后按照一定的顺序像电影一样播放。 电影动画的好处就是,运行一次可以多次播放,甚至可以直接生成avi文件,直接独立与Matlab环境播放。这是其它三种动画制作方法所不具备的。MATLAB中,创建电影动画的过程分为以下四步:step1:调用moviein函数对

10、内存进行初始化(该步骤在Matlab5.3以上均可省略),创建一个足够大的矩阵,使之能够容纳基于当前坐标轴大小的一系列指定的图形(此处称为帧)。step2:调用getframe函数生成每个帧。该函数返回一个列矢量,利用这个矢量,就可以创建一个电影动画矩阵。getframe函数可以捕捉动画帧,并保存到矩阵中。一般将该函数放到for循环中得到一系列的动画帧。该函数格式有:(1)F=gefframe,从当前图形框中得到动画帧(2)F=gefframe(h),从图形句柄h中得到动画帧(3)F=getframe(h,rect),从图形句柄h的指定区域rec中得到动画帧step3:调用movie函数按照指

11、定的速度和次数运行该电影动画。当创建了一系列的动画帧后,可以利用movie函数播放这些动画帧。该函数的主要格式有:(1)movie(M),将矩阵M中的动画帧播放一次(2)movie(M,n),将矩阵M中的动画帧播放n次(3)movie(M,n,fps),将矩阵M中的动画帧以每秒fps帧的速度播放n次step4:调用movie2avi函数可以将矩阵中的一系列动画帧转换成视频文件avi文件。这样,即使脱离了matlab环境都可以播放动画。该方法的经典格式是:%录制电影动画for j=1:n%这里输入我们的绘图命令%M(j) = getframe;endmovie(M)%单帧显示方法f = getf

12、rame(gcf);colormap(f.colormap);image(f.cdata);1.1.1 电影动画演示实例(一)千变万化的线条%by dynamic%see also %2008.7.12close allfigure(toolbar,none,menubar,none,NumberTitle,.off,name,电影动画录制Matlabsky); axis equal m=moviein(20,gcf);%在当前窗口下,截取20帧set(gca,nextplot,replacechildren,box,off,color,b,xgrid,on) title(截图当前窗口的20帧

13、动画)for j=1:20 plot(fft(eye(j+16) m(:,j)=getframe(gcf); %截取动画帧,保存到m变量中end hh=figure(toolbar,none,menubar,none,NumberTitle,.off,name,电影动画播放Matlabsky); title(将截取的动画播放5遍)set(gca,xtick,ytick,xticklabel,yticklabel,)movie(hh,m,5)1.1.2 电影动画演示实例(二)跳动的红心帖子地址: HYPERLINK /viewthread.php?tid=9489 /viewthread.php

14、?tid=9489% by xiezhhx = linspace(-2,2,100);X,Y,Z = meshgrid(x,x,x); I1 = (X.2+9/4*Y.2+Z.2-1).3-X.2.*Z.3-9/80*Y.2.*Z.3; p = patch(isosurface(X,Y,Z,I1,0); set(p, FaceColor, red, EdgeColor, none); view(3); axis equal ;axis off;light(Posi,0 -2 3); % 在(0,-2,3)点处建立一个光源lighting phongset(gca,nextplot,replac

15、echildren);% 记录电影XX = get(p,XData);YY = get(p,YData);ZZ = get(p,ZData);for j = 1:20 bili = sin(pi*j/20); set(p,XData,bili*XX,YData,bili*YY,ZData,bili*ZZ) F(j) = getframe;end% 放映10次movie(F,10)1.2 擦除动画帖子地址: HYPERLINK /thread-240-1-1.html /thread-240-1-1.html画在图形窗口中按照一定的算法连续擦除和重绘图形对象,表现为动画,这个也是MATLAB中使

16、用最多的方法。 使用Matlab的绘图函数不断重复绘制图形对象,重绘过程中递增式地改变图形对象位置将产生动画效果。在重绘对象的过程中之所以能产生动画效果是由于对原来的图形对象进行了擦除处理。MATLAB中,创建擦除重绘动画的过程分为以下三步:step1:设置重绘对象的擦除模式EraseMode模式Matlab的图形绘制函数允许采用不同的擦除模式来擦除原来的对象,不同的擦除模式将产生不同的动画效果。擦除模式是通过没置“EraseMode”属性来完成的,一共有三种擦除模式:none:重新绘制图形对象时不擦除原来的对象,这种模式可动态演示图形的生成过程,如曲线和旋转曲砸的生成过程background

17、:在重新绘制图形对象之前。用背景色重绘对象来达到擦除原来图形对象的目的。该模式会擦除任何对象和它下面的任何图形Xor:在重新绘制图形对象之前,只擦除原来的对象,不会擦除其他对象或图形。这种模式能产生图形对象移动的效果step2:在循环语句中使用set更改图形的xdata,ydata和zdata等坐标数据step3:使用darwnow命令刷新屏幕该方法的经典格式是:%擦除重绘模式动画%选择一个擦除模式set(h,erasemode,erasemode)%h是需要执行动画图像的句柄,一般都是由line或者plot创建%需要执行一些图形计算命令%循环语句中更新坐标数据,一般使用for或者whilef

18、or i=1:n % %必要的MATLAB命令 % set(h,xdata,xdata,ydta,ydata)%更新图像的坐标数据 drownnow%刷新屏幕 % %其它Matlab语句 %end1.2.1 Matlab擦除重绘动画实例(一)运动的小球function f=anim_ball(K,ki)%演示红色小球沿一条封闭旋螺线运动的实时动画% 仅演示实时动画的调用格式为 anim_ball(K)% 既演示实时动画又拍摄照片的调用格式为 f=anim_ball(K,ki)% K 红球运动的循环数(不小于 1 )% ki 指定拍摄照片的瞬间,取 1 到 1034 间的任意整数% f 存储拍摄

19、的照片数据,可用 image(f.cdata) 观察照片% 产生封闭的运动轨线%by dynamic%all rights reserved by %2007.10.26%t1=(0:1000)/1000*10*pi;x1=cos(t1);y1=sin(t1);z1=-t1;t2=(0:10)/10;x2=x1(end)*(1-t2);y2=y1(end)*(1-t2);z2=z1(end)*ones(size(x2);t3=t2;z3=(1-t3)*z1(end);x3=zeros(size(z3);y3=x3;t4=t2;x4=t4;y4=zeros(size(x4);z4=y4;x=x1

20、 x2 x3 x4;y=y1 y2 y3 y4;z=z1 z2 z3 z4;h=figure(numbertitle,off,name,擦除动画演示(运动的小球)Matlabsky)plot3(x,y,z,b)axis off %绘制红点%擦除模式设为xorh=line(Color,1 0 0,Marker,.,MarkerSize,40,EraseMode,xor);n=length(x);i=1;j=1;%循环改变坐标,表现为小球运动while 1 if ishandle(h),return,end set(h,xdata,x(i),ydata,y(i),zdata,z(i); drawn

21、ow; pause(0.0005) %这里设置小球运动速度 i=i+1; if nargin=2 & nargout=1 if(i=ki&j=1);f=getframe(gcf);end %获取指定的帧,保存到f中 end if in %判断是否运行了一周,是将i设置为1,并将运行周数j加1 i=1;j=j+1; %判断是否到指定的运行周数,是,退出 if jK;break;end endend1.2.2 Matlab擦除重绘动画实例(二)单摆横梁%挂摆横梁%by dynamic%see also %2008.6.9%h=figure(numbertitle,off,name,擦除动画演示(挂

22、摆横梁)Matlabsky)%绘制横梁plot(-0.2;0.2,0;0,-k,linewidth,20);%画初始位置的单摆g=0.98;%重力加速度,可以调节摆的摆速l=1;%摆长theta0=pi/4;%初始角度x0=l*sin(theta0);%初始x坐标y0=-l*cos(theta0);%初始y坐标axis(-0.75,0.75,-1.25,0);axis off%创建摆锤%擦除模式为xorhead=line(x0,y0,color,r,linestyle,.,erasemode,xor,markersize,40);%创建摆杆body=line(0;x0,-0.05;y0,col

23、or,b,linestyle,-,erasemode,xor);%摆的运动t=0;%时间变量dt=0.01;%时间增量while 1 t=t+dt; theta=theta0*cos(sqrt(g/l)*t);%单摆角度与时间的关系 x=l*sin(theta); y=-l*cos(theta); if ishandle(h),return,end set(head,xdata,x,ydata,y);%改变擦除对象的坐标数据 set(body,xdata,0;x,ydata,-0.05;y); drawnow;%刷新屏幕end1.2.3 Matlab擦除重绘动画实例(三)时钟演示%将下列命令保

24、存到M文件中,直接运行%Matlab时钟动画演示%rewrite by dynamic%more information please go to try close allhfig=figure(NumberTitle,off,name,.Clock Animation Demo-by MatlabSky,MenuBar,none);theta=linspace(0,6.3,1000);x1=8*cos(theta);y1=8*sin(theta);plot(x1,y1,b,linewidth,1.4)%绘制外表盘hold onaxis equalx2=7*cos(theta);y2=7*s

25、in(theta);plot(x2,y2,y,linewidth,3.5)%绘制内表盘fill(0.4*cos(theta),0.4*sin(theta),r);%绘制指针转轴axis off axis(-10 10 -10 10)set(gca,position,0.13 0.05 0.775 0.815)title(date,fontsize,18)for k=1:12;xk=9*cos(-2*pi/12*k+pi/2);yk=9*sin(-2*pi/12*k+pi/2);plot(xk/9*8 xk/9*7,yk/9*8 yk/9*7,color,0.3 0.8 0.9);text(xk

26、,yk,num2str(k),fontsize,16,color,.0.9 0.3 0.8,HorizontalAlignment,center);%表盘时刻标度end% 计算时针位置ti=clock;th=-(ti(4)+ti(5)/60+ti(6)/3600)/12*2*pi+pi/2;xh3=4.0*cos(th);yh3=4.0*sin(th);xh2=xh3/2+0.5*cos(th-pi/2);yh2=yh3/2+0.5*sin(th-pi/2);xh4=xh3/2-0.5*cos(th-pi/2);yh4=yh3/2-0.5*sin(th-pi/2);hh=fill(0 xh2

27、xh3 xh4 0,0 yh2 yh3 yh4 0,0.6 0.5 0.3);% 计算分针位置tm=-(ti(5)+ti(6)/60)/60*2*pi+pi/2;xm3=6.0*cos(tm);ym3=6.0*sin(tm);xm2=xm3/2+0.5*cos(tm-pi/2);ym2=ym3/2+0.5*sin(tm-pi/2);xm4=xm3/2-0.5*cos(tm-pi/2);ym4=ym3/2-0.5*sin(tm-pi/2);hm=fill(0 xm2 xm3 xm4 0,0 ym2 ym3 ym4 0,0.6 0.5 0.3);% 计算秒针位置ts=-(ti(6)/60*2*pi

28、+pi/2;hs=plot(0 7*cos(ts),0 7*sin(ts),color,w,linewidth,2);set(gcf,doublebuffer,on);while 1;ti=clock;%每次读取系统时间,并进行运算% 计算时针位置th=-(ti(4)+ti(5)/60+ti(6)/3600)/12*2*pi+pi/2;xh3=4.0*cos(th);yh3=4.0*sin(th);xh2=xh3/2+0.5*cos(th-pi/2);yh2=yh3/2+0.5*sin(th-pi/2);xh4=xh3/2-0.5*cos(th-pi/2);yh4=yh3/2-0.5*sin(

29、th-pi/2);set(hh,XData,0 xh2 xh3 xh4 0,YData,0 yh2 yh3 yh4 0) % 计算分针位置tm=-(ti(5)+ti(6)/60)/60*2*pi+pi/2;xm3=6.0*cos(tm);ym3=6.0*sin(tm);xm2=xm3/2+0.5*cos(tm-pi/2);ym2=ym3/2+0.5*sin(tm-pi/2);xm4=xm3/2-0.5*cos(tm-pi/2);ym4=ym3/2-0.5*sin(tm-pi/2);set(hm,XData,0 xm2 xm3 xm4 0,YData,0 ym2 ym3 ym4 0)% 计算秒针

30、位置ts=-(ti(6)/60*2*pi+pi/2;set(hs,XData,0 7*cos(ts),YData,0 7*sin(ts)drawnow;pause(0.09)endcatchMatlabSky-打造最优、专业和权威的Matlab技术交流平台!更多信息参见:.returnend1.2.4 Matlab擦除重绘动画实例(四)小球绕跑道运动%小球绕跑道运动%rewrite by dynamic%more information please go to %figure(numbertitle,off,name,.Matlab Animation Demo-by matlabsky,M

31、enuBar,none)prompt=请输入速度v:,请输入长度L:,请输入半径r:;default=5,10,2;v=5;L=10;r=2;p=inputdlg(prompt,输入参数,1,default);v=str2double(p(1);L=str2double(p(2);r=str2double(p(3);if v=0|L=0|r=0 warndlg(Matlabsky提醒您:输入参数必须为整数,警告)else axis(0,2*r+L,0,2*r) ox1=r;oy1=r;ox2=r+L;oy2=r; x1=r:0.015*v:r+L; y1=2*r*ones(size(x1);

32、thita=0:0.015*v/r:pi; x2=sin(thita)*r+ox2; y2=cos(thita)*r+oy2; x3=r+L:-0.015*v:r; y3=zeros(size(x3); x4=-sin(thita)*r+ox1; y4=-cos(thita)*r+oy1; x=x1 x2 x3 x4; y=y1 y2 y3 y4; plot(x,y); text(0,-2,长度L= num2str(L) , . 半径r= num2str(r) , 速度v= num2str(v); axis equal set(gca,Visible,off) hm=line(r,2*r,co

33、lor,red,marker,.,markersize,37,erasemode,xor); while 1 for i=1:length(x) try set(hm,xdata,x(i),ydata,y(i); pause(0.0003) drawnow catch MatlabSky-打造最优、专业和权威的Matlab技术交流平台!. 更多信息参见: return end end endend1.3 质点动画 帖子地址: HYPERLINK /thread-594-1-1.html /thread-594-1-1.html用comet()等函数绘制彗星图,它能演示一个质点的运动。质点运动轨

34、迹动画方式是最简单的动画产生方式,顾名思义,就是产生一个顺着曲线轨迹运动的质点来操作。Matlab中提供了comet和comet3命令来实现质点运动轨迹动画的绘制,其常用格式为:comet(xdata,ydata,p) % p是指彗星的尾巴的长度,可以是常数或者size(x)大小的向量其他具体格式大家可以参考doc comet帮助系统该方法的使用一般使用步骤如下:step1:求解出质点完整的运动轨迹坐标x,y和zstep2:使用comet或者comet3直接绘制动点1.3.1 质点动画演示(一)%by dynamic%see also %2008.6.23%t=0:pi/50:10*pi;x=

35、30*sin(t);y=30*cos(t);z=t;plot3(x,y,z);hold on%axis equalcomet3(x,y,z,0.5)1.3.2 质点动画演示(二)平抛运动%by dynamic%see also %2008.6.23%vx = 40;t = 0:0.01:10;x = vx*t;y = -9.8*t.2/2;comet(x,y)1.3.3 质点动画演示(三)导弹发射%by dynamic%see also %2008.6.13%vx = 100*cos(1/4*pi);vy = 100*sin(1/4*pi);t = 0:0.001:15;x = vx*t;y

36、= vy*t-9.8*t.2/2;comet(x,y)1.4 霓虹灯效果动画帖子地址: HYPERLINK /thread-9255-1-1.html /thread-9255-1-1.html如今繁华大都市的夜色中,霓虹闪烁,煞是好看,调用MATLAB中的spinmap函数可以做出这种效果的动画,它是通过旋转颜色映像的方式来呈现这种霓虹闪烁的动画效果。spinmap函数的调用格式如下:spinmap % 旋转颜色映像约5秒钟spinmap(t) % 旋转颜色映像约t秒钟,具体时间取决于硬件spinmap(t,inc) % 旋转颜色映像约t秒钟,并设置增量参数inc,该参数用来调整闪烁频率sp

37、inmap(inf) % 不限时旋转颜色映像,若需终止,请按Ctrl+C键1.4.1 霓虹灯效果动画实例(一) 霓虹闪烁的球体% by xiezhhsphere; % 绘制单位球面axis equal; % 设置坐标显示比例相同axis off; % 隐藏坐标轴spinmap(20,1); % 设置增量参数为1,旋转颜色映像约20秒1.4.2 霓虹灯效果动画实例(二) 一颗花心帖子地址: HYPERLINK /viewthread.php?tid=9489 /viewthread.php?tid=9489% by qibbxxtclear;clc;close allc=5;t=linspace

38、(-c,c);x,y=meshgrid(t);z=17*x.2-16*abs(x).*y+17*y.2-225;pcolor(x,y,z);shading interppause(2);spinmap(10)1.5 GIF格式动画制作帖子地址: HYPERLINK /thread-9236-1-2.html /thread-9236-1-2.htmlGIF格式动画以其小巧受到大家的广泛欢迎,本贴以案例形式做一个总结。制作GIF动画要用到getframe、frame2im、rgb2ind和imwrite函数,getframe函数用来抓取当前图形窗口中的图像,frame2im函数和rgb2ind函

39、数用来将抓取的图像转为索引图像,imwrite函数用来将索引图像写入GIF格式动画,需要注意的是imwrite函数不能将真彩图像写入GIF格式动画。关于这些函数的具体用法,这里不再详述,请版友自行查阅帮助。下面只给出案例。1.5.1 GIF格式动画制作案例绕螺旋线运动的小球% by xiezhhfilename = xiezhh.gif;z = linspace(0, 10*pi, 100); %产生一个行向量x = 20*sin(z),zeros(1,10);y = 20*cos(z),20*ones(1,10);z = z,linspace(10*pi,0,10);plot3(x, y,

40、z, r, linewidth, 2); %绘制螺旋线hold on %图形保持h = plot3(0,20,0, . , MarkerSize ,40, EraseMode , xor );xlabel(X); ylabel(Y); zlabel(Z); %添加坐标轴标签axis(-25 25 -25 25 0 40); %设置坐标轴范围view(-210,30); %设置视角for i = 1:length(x) set(h, xdata ,x(i), ydata ,y(i), zdata ,z(i); drawnow; % 刷新屏幕 pause(0.05) f = getframe(gc

41、f); imind = frame2im(f); imind,cm = rgb2ind(imind,256); if i = 1 imwrite(imind,cm,filename,gif, Loopcount,inf,DelayTime,0.1); else imwrite(imind,cm,filename,gif,WriteMode,append,DelayTime,0.1); endend2 动画的保存帖子地址: HYPERLINK /thread-595-1-1.html /thread-595-1-1.html下面再讲述下生成的动画如何保存。动画保存,只有对电影动画而言才有意义,其

42、他两种谈不上保存,因为他们都是实时的,眨眼就过的。而电影动画是先将动画一帧一帧的保存下来,在使用movie函数播放。它的好处是,运行一次MATLAB程序就可以播放无数次,只要你的帧数据还在。但是这还是不方便,由于它没法脱离MATLAB环境,很讨厌。还好MATLAB为我们提供了movie2avi函数,它可以把动画直接转换成avi文件,而avi文件则可以脱离Matalb环境而在其他地方运行了。请教如何保存matlab的动画?前几天刚答辩完,给你贴上。function avimakewarning off;load dataM,N,K=size(data);data=data/(max(abs(da

43、ta(:);aviobj = avifile(mymovie.avi,fps,10); for kk=1:10:K imagesc(data(:,:,kk); set(gca,clim,-1 1); colormap(hsv(128) frame = getframe(gca); aviobj = addframe(aviobj,frame);endaviobj = close(aviobj);直接保存gif动画m(:,k)=getframe;%构造gif图像的帧,nn(:,:,:)=getframe;%转换为可以直接输出的格式(这会是图像丢失)%如果要制作彩色的图像,你只能把生成的彩色图像单

44、独制作(使用其他软件)nn1=nn.cdata;nn1=rgb2gray(nn1);imwrite(nn1,out.gif,gif,WriteMode,append)3 有关动画制作的实验报告帖子地址: HYPERLINK /thread-600-1-1.html /thread-600-1-1.html设计题目:三维与抛物动画仿真 姓 名: 学 号: 院 系: 专 业: 指导教师: 一课程设计目的: 1.熟悉课程设计的基本流程; 2:掌握MATLAB语法结构及调试方法; 3:熟悉MATLAB函数调用,熟练二维画图; 4:掌握MATLAB语言在控制方面的运用; 5:学会用MATLAB进行基本仿

45、真; 6:掌握MATLAB编程技巧,提高编程水平。二系统分析与设计该动画仿真开始时是一个三维动画旋转13次,旋转完后将出现另一个窗口继续进行抛物线旋转动画。抛物线旋转26次后结束旋转,此时动画结束,最后关闭动画窗口,返回MATLAB语言环境。设计要求:第一个动画是三维图形在空中旋转, 第二个是抛物线按照一定的规则旋转,旋转出 一个有形的三维空间多边形。此MATLAB动画有两个小动画组成,总体为自动弹出式,即,第一个三维动画结束,自动弹出第二个窗口实现抛物线旋转动画。第一个三维动画运用figure命令创建图形窗口,创建帧矩阵,填充颜色。用movie命令控制转动次数。第二个动画同样运用figure

46、命令创建一个信的窗口,当第一个动画结束自动由figure命令弹出第二个窗口运行动画。主要是画出三维空间曲线,利用语句控制其旋转方式,并用语句控制旋转次数,由pause控制每次旋转所停顿的时间,最后旋转出所设计的空间图形。MATLAB动画源程序清单:%Animation:rotate peak%by dynamic%see also %figure(name,三维动画 旋转的山峰Matlabsky);%绘制三维曲面X,Y,Z=peaks(14); surfl(X,Y,Z); axis(-4 4 -4 4 -11 11); %建立坐标系axis off; %去除三维网格线shading inter

47、p; colormap spring; m=moviein(13); %创建帧矩阵mfor i=1:12 %命令生成图形 view(-37.5+30*(i-1),25); m(:,i)=getframe; %捕获动画帧end movie(m); %回放动画%Animation:rotate paraboloid%by dynamic%see also %h0=figure(name,三维动画 旋转抛物面Matlabsky); axis(-5 10 -5 10 -10 80) %建立坐标系hold on %保持当前图形的所有特性%定义三组坐标曲线a=0:0.5:10; b=zeros(size(

48、a); c=a.2; theta=pi/20; xx=a; %设置三维长轴坐标数据yy=b; %设置三维宽轴坐标数据 zz=c; %设置三维高度数据%画旋转抛物面for i=1:40 M=tan(i*theta) cos(i*theta) 0;-cos(i*theta) sin(i*theta) 0;0 0 1; temp=M*a;b;c; xx(i+1,:)=temp(1,:);yy(i+1,:)=temp(2,:);zz(i+1,:)=temp(3,:); mesh(xx,zz,yy); %绘制三维网格曲面 axis off %去掉三维网格线 pause(0.1) %每次旋转停顿0.1秒

49、if i=26 %设置旋转次数 break end end三系统调试过程中出现的主要问题: 1:程序程序出错,常会出现未定义变量:Error: Missing variable or function.使用非英文符号时有Error: End of Input expected, : found. 2:路径出现错误,会出现程序无相应 3:程序运行时,不能显示出动画图形,只有三维坐标 4:运行一个动画后,不能弹出第二个窗口运行动画 5:没有规定运行次数,会出现不断旋转,无法停止 6:语句运用错误,运行的动画与理论不符 7:常常出现函数调用错误 8:不能熟悉及正确使用各种语句 9:没有掌握matla

50、b语句用法,编程时出现很多的用法及运用的错误四系统运行报告与结论:此动画仿真是由两个单独的动画经过修改后组成的,并在两个不同的窗口依次运行动画。经过调试,三维图形转动,没有出现语法错误,而且符合设计要求。抛物线旋转动画中,运用figure语句创建新的窗口,由抛物线按要求旋转,最后转出实际要求的三维空间图形。两幅图形都准确显示,整个程序运行正常。开始设计时,是想做出有规则的动画,第二个开始想的是最后旋转出有规则的三维图形。但由于学会的知识太少,不能实现。五总结: Matlab语言是一种广泛应用于工程计算及数值分析 领域的新型高级语言,Matlab功能强大、简单易学、编程效率高;MATLAB语言不

51、同于其他计算机语言,它是一种解释语言,即解释一条就执行一条!而且严格的区分中英文!所以,在编制程序时必须细心!这使我们在编制程序的过程中对MATLAB有了一个深层次的理解! 经过此次MATLAB课程设计,我学到了更多MATLAB的知识。为了完美的完成这次课程设计,查阅资料看了很多MATLAB语言的运用方法,也查阅了很多关于MATLAB的书籍,同时我也掌握了很多新知识,特别是了解了许多MATLAB函数。在设计过程中,我也碰到了许多问题,走了很多弯路,主要是因为对MATLAB还较不熟练,犯了一些常规错误,但最后通我查阅相关书籍和请教同学,问题都解决了。在解决问题过程中,学会了很多MATLAB的知识

52、,最重要的是学会了自己解决问题的能力,知道怎么去处理发生的错误。总之,通过MATLAB课程设计,我熟悉了课程设计的流程,掌握了MATLAB语言的基本语句 ,学会了独立思考和查阅资料解决问题的能力! 六致谢:在这里, 多谢老师为我们给我们讲解知识,并且给了我们这次自己动手做动画的机会,使我发现了做动画的乐趣,从而促使我更进一步的学习MATLAB语言,并将知识应用与实际问题的解决!增添了生活的丰富。特别感谢Matlabsky联盟的【MATLAB动画制作、实现和保存】教程的详细讲解。七参考资料: 1.张平编著MATLAB基础与应用2.杨杰,阙大顺编著:Matlab语言基础及使用入门 3.Matlab

53、sky技术论坛, HYPERLINK / 4 更多动画实例帖子地址: HYPERLINK /thread-596-1-1.html /thread-596-1-1.html更多的MATLAB实例等着大家自己去开发,我们这里提供了一些,大家可以依葫芦画瓢一样学习下,希望起一个抛砖引玉的作用在本帖中我们提供了如下MATLAB动画实例:电影动画、擦除动画和质点动画。4.1 电影动画演示旋转的山峰%by dynamic%see also %2008.6.12%figure(toolbar,none,NumberTitle,off,name,.电影动画(Rotate Peak)Matlabsky); X

54、,Y,Z=peaks(30); surfl(X,Y,Z); axis(-3 3 -3 3 -10 10); axis off; shading interp; colormap hot; m=moviein(15); for i=1:15 view(-37.5+24*(i-1),30); m(:,i)=getframe; end movie(m);4.2 擦除动画实例卫星绕地球运动(注释很详细)%by dynamic%see also %2008.12.23%h=figure(numbertitle,off,name,卫星绕地球旋转演示动画Matlabsky);%设置标题名字s1=0:.01:

55、2*pi;hold on;axis equal;%建立坐标系axis off;%除掉Axesr1=10;%地球到太阳的平均距离r2=3;%卫星的轨道半径w1=1;%设置地球公转角速度w2=12;%设置卫星绕地球公转角速度t=0;%初始时刻pausetime=.002;%设置视觉暂留时间sita1=0;sita2=0;%设置开始它们都在水平线上set(gcf,doublebuffer,on) %消除抖动plot(-20,18,color,r,marker,.,markersize,40);text(-17,18,太阳);%对太阳进行标识plot(-20,16,color,b,marker,.,m

56、arkersize,20);text(-17,16,地球);%对地球进行标识plot(-20,14,color,w,marker,.,markersize,13);text(-17,14,卫星);%对卫星进行标识plot(0,0,color,r,marker,.,markersize,60);%画太阳plot(r1*cos(s1),r1*sin(s1);%画地球公转轨道set(gca,xlim,-20 20,ylim,-20 20);%画地球初始位置p1=plot(r1*cos(sita1),r1*sin(sita1),color,b,marker,.,markersize,30); l1=p

57、lot(r1*cos(sita1)+r2*cos(s1),r1*sin(sita1)+r2*sin(s1);%画卫星绕地球的公转轨道p2x=r1*cos(sita1)+r2*cos(sita2);p2y=r1*sin(sita1)+r2*sin(sita2);p2=plot(p2x,p2y,w,marker,.,markersize,20);%画卫星的初始位置orbit=line(xdata,p2x,ydata,p2y,color,r);%画卫星的运动轨迹while 1 if ishandle(h),return,end set(p1,xdata,r1*cos(sita1),ydata,r1*

58、sin(sita1);%设置地球的运动过程 %设置卫星绕地球的公转轨道的运动过程 set(l1,xdata,r1*cos(sita1)+r2*cos(s1),ydata,r1*sin(sita1)+r2*sin(s1); ptempx=r1*cos(sita1)+r2*cos(sita2); ptempy=r1*sin(sita1)+r2*sin(sita2); set(p2,xdata,ptempx,ydata,ptempy);%设置卫星的运动过程 p2x=p2x ptempx; p2y=p2y ptempy; set(orbit,xdata,p2x,ydata,p2y);%设置卫星运动轨迹

59、的显示过程 sita1=sita1+w1*pausetime;%地球相对太阳球转过的角度 sita2=sita2+w2*pausetime;%卫星相对地球转过的角度 pause(pausetime); %视觉暂停 drawnow %刷新屏幕,重绘end4.3 擦除动画实例太阳地球月亮卫星,绕转演示动画(注释很详细)%by dynamic%see also %2008.12.6%clear; clc;close all%定义几组变量.分别代表的含义是:%相对圆心坐标 半径 最近距离 最远距离 周期 角速度 旋转角度x0=0; y0=0; r0=80; Lmin0=0; Lmax0=0; T0=2

60、160; w0=0*pi/T0; q0=0;x1=0; y1=0; r1=40; Lmin1=25; Lmax1=30; T1=1080; w1=pi/T1; q1=0;x2=0; y2=0; r2=20; Lmin2=8; Lmax2=10; T2=180; w2=pi/T2; q2=0;x3=0; y3=0; r3=10; Lmin3=3; Lmax3=05; T3=30; w3=pi/T3; q3=0;%初始化hh=figure(numbertitle,off,name,.太阳地球月亮卫星,绕转演示动画Matlabsky);%设置擦除方式sun=line(0 ,0 ,color,r,li

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论