MATLAB动画图作动态图精品资料.doc
《MATLAB动画图作动态图精品资料.doc》由会员分享,可在线阅读,更多相关《MATLAB动画图作动态图精品资料.doc(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MATLAB技术论坛电子期刊编辑:xiezhh制作:MATLAB技术论坛版权:MatlabSky版权所有网址: 第1期2010.09No.1中国权威MATLAB论坛核心期刊MATLAB技术论坛简介目 录1 动画的制作. 11.1 电影动画. 11.1.1 电影动画演示实例(一)千变万化的线条. 21.1.2 电影动画演示实例(二)跳动的红心. 21.2 擦除动画. 31.2.1 Matlab擦除重绘动画实例(一)运动的小球. 41.2.2 Matlab擦除重绘动画实例(二)单摆横梁. 51.2.3 Matlab擦除重绘动画实例(三)时钟演示. 51.2.4 Matlab擦除重绘动画实例(四)小
2、球绕跑道运动. 71.3 质点动画. 81.3.1 质点动画演示(一) 81.3.2 质点动画演示(二)平抛运动. 81.3.3 质点动画演示(三)导弹发射. 91.4 霓虹灯效果动画. 91.4.1 霓虹灯效果动画实例(一) 霓虹闪烁的球体. 91.4.2 霓虹灯效果动画实例(二) 一颗花心. 91.5 GIF格式动画制作. 101.5.1 GIF格式动画制作案例绕螺旋线运动的小球. 102 动画的保存. 103 有关动画制作的实验报告. 114 更多动画实例. 144.1 电影动画演示旋转的山峰. 144.2 擦除动画实例卫星绕地球运动(注释很详细) 144.3 擦除动画实例太阳地球月亮卫
3、星,绕转演示动画(注释很详细) 155 光学夫朗和费衍射现象模拟MATLAB源代码. 166 牛顿环动画演示MATLAB源代码. 187 使用MATLAB绘制原子轨道和电子云图形. 198 振动摆MATLAB动画源代码. 19MATLAB基础应用版块Matlab中动画的实现、制作和保存Matlab的确是一个很优秀的工程计算软件,除了强大的矩阵运算,仿真分析外,绘图功能也是相当的强大。但是由于Matlab本身的多线程编程缺陷(所谓多线程,就是MATLAB没法同时执行多个回调,只能排队一个一个的按顺序运行,Timer对象除外,它是MATLAB中唯一能够执行多线程的方法),想要动态的画图,并且能够很
4、好的在GUI中得到控制,还不是一件很容易的事情。但是动画具有生动形象直观的好处,对我的教学、研究等都有不小的作用。那好,我在这里勉为其难的介绍下Matlab中是如何制作动画的。1 动画的制作Matlab中动画实现的方法主要有下面三种1.1 电影动画 帖子地址:从不同的视角拍下一系列对象的图形,并保存到变量中,然后按照一定的顺序像电影一样播放。 电影动画的好处就是,运行一次可以多次播放,甚至可以直接生成avi文件,直接独立与Matlab环境播放。这是其它三种动画制作方法所不具备的。MATLAB中,创建电影动画的过程分为以下四步:step1:调用moviein函数对内存进行初始化(该步骤在Matl
5、ab5.3以上均可省略),创建一个足够大的矩阵,使之能够容纳基于当前坐标轴大小的一系列指定的图形(此处称为帧)。step2:调用getframe函数生成每个帧。该函数返回一个列矢量,利用这个矢量,就可以创建一个电影动画矩阵。getframe函数可以捕捉动画帧,并保存到矩阵中。一般将该函数放到for循环中得到一系列的动画帧。该函数格式有:(1)F=gefframe,从当前图形框中得到动画帧(2)F=gefframe(h),从图形句柄h中得到动画帧(3)F=getframe(h,rect),从图形句柄h的指定区域rec中得到动画帧step3:调用movie函数按照指定的速度和次数运行该电影动画。当
6、创建了一系列的动画帧后,可以利用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 = getframe(gcf);colorm
7、ap(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帧动画)for j=1:20 pl
8、ot(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 电影动画演示实例(二)跳动的红心帖子地址:% by xiezhhx = linspace(-2,2,100);X,Y,Z = meshgrid(x,x,x); I1 = (X.
9、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,replacechildren);% 记录电影XX = get(p,XData);YY = get(p,YData);ZZ = get(p,ZData);for j
10、 = 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 擦除动画帖子地址:画在图形窗口中按照一定的算法连续擦除和重绘图形对象,表现为动画,这个也是MATLAB中使用最多的方法。 使用Matlab的绘图函数不断重复绘制图形对象,重绘过程中递增式地改变图形对象位置将产生动画效果。在重绘对象的过程中之所以能产生动画效果是由于对原来的图形对象进行了擦除处理。MATLAB中,创建擦除重绘动画的过程分为以下三步:step1:设
11、置重绘对象的擦除模式EraseMode模式Matlab的图形绘制函数允许采用不同的擦除模式来擦除原来的对象,不同的擦除模式将产生不同的动画效果。擦除模式是通过没置“EraseMode”属性来完成的,一共有三种擦除模式:none:重新绘制图形对象时不擦除原来的对象,这种模式可动态演示图形的生成过程,如曲线和旋转曲砸的生成过程background:在重新绘制图形对象之前。用背景色重绘对象来达到擦除原来图形对象的目的。该模式会擦除任何对象和它下面的任何图形Xor:在重新绘制图形对象之前,只擦除原来的对象,不会擦除其他对象或图形。这种模式能产生图形对象移动的效果step2:在循环语句中使用set更改图
12、形的xdata,ydata和zdata等坐标数据step3:使用darwnow命令刷新屏幕该方法的经典格式是:%擦除重绘模式动画%选择一个擦除模式set(h,erasemode,erasemode)%h是需要执行动画图像的句柄,一般都是由line或者plot创建%需要执行一些图形计算命令%循环语句中更新坐标数据,一般使用for或者whilefor i=1:n % %必要的MATLAB命令 % set(h,xdata,xdata,ydta,ydata)%更新图像的坐标数据 drownnow%刷新屏幕 % %其它Matlab语句 %end1.2.1 Matlab擦除重绘动画实例(一)运动的小球fu
13、nction f=anim_ball(K,ki)%演示红色小球沿一条封闭旋螺线运动的实时动画% 仅演示实时动画的调用格式为 anim_ball(K)% 既演示实时动画又拍摄照片的调用格式为 f=anim_ball(K,ki)% K 红球运动的循环数(不小于 1 )% ki 指定拍摄照片的瞬间,取 1 到 1034 间的任意整数% f 存储拍摄的照片数据,可用 image(f.cdata) 观察照片% 产生封闭的运动轨线%by dynamic%all rights reserved by %2007.10.26%t1=(0:1000)/1000*10*pi;x1=cos(t1);y1=sin(t
14、1);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 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 %绘制红点%擦除模式设为xo
15、rh=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); drawnow; pause(0.0005) %这里设置小球运动速度 i=i+1; if nargin=2 & nargout=1 if(i=ki&j=1);f=getframe(gcf);end %获取指定的帧,保存到f中 end if in %判断是否运行了一周
16、,是将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,擦除动画演示(挂摆横梁)Matlabsky)%绘制横梁plot(-0.2;0.2,0;0,-k,linewidth,20);%画初始位置的单摆g=0.98;%重力加速度,可以调节摆的摆速l=1;%摆长theta0=pi/4;%初始角度x0=l*sin(theta0);%初
17、始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,color,b,linestyle,-,erasemode,xor);%摆的运动t=0;%时间变量dt=0.01;%时间增量while 1 t=t+dt; theta=theta0*cos(sqrt(g/l)*t);%单摆角度与时间的关系 x=l*sin(the
18、ta); 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擦除重绘动画实例(三)时钟演示%将下列命令保存到M文件中,直接运行%Matlab时钟动画演示%rewrite by dynamic%more information please go to try close allhfig=figure(NumberTitle,off,name,.Clock A
19、nimation 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*sin(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,posi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB动画图作动态图 精品资料 MATLAB 动画图 动态 精品 资料
限制150内