您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > MATLAB-动画图-----作动态图
MATLAB技术论坛电子期刊编辑:xiezhh制作:MATLAB技术论坛版权:MatlabSky©版权所有网址:电影动画演示实例(一)——千变万化的线条1.1.2电影动画演示实例(二)——跳动的红心1.2擦除动画1.2.1Matlab擦除重绘动画实例(一)——运动的小球1.2.2Matlab擦除重绘动画实例(二)——单摆横梁1.2.3Matlab擦除重绘动画实例(三)——时钟演示1.2.4Matlab擦除重绘动画实例(四)——小球绕跑道运动1.3质点动画1.3.1质点动画演示(一)1.3.2质点动画演示(二)——平抛运动1.3.3质点动画演示(三)——导弹发射1.4霓虹灯效果动画1.4.1霓虹灯效果动画实例(一)——霓虹闪烁的球体1.4.2霓虹灯效果动画实例(二)——一颗花心1.5GIF格式动画制作1.5.1GIF格式动画制作案例——绕螺旋线运动的小球2动画的保存3有关动画制作的实验报告4更多动画实例4.1电影动画演示——旋转的山峰4.2擦除动画实例——卫星绕地球运动(注释很详细)4.3擦除动画实例——太阳|地球|月亮|卫星,绕转演示动画(注释很详细)5光学夫朗和费衍射现象模拟MATLAB源代码6牛顿环动画演示MATLAB源代码7使用MATLAB绘制原子轨道和电子云图形8振动摆MATLAB动画源代码MATLAB基础应用版块Matlab中动画的实现、制作和保存的确是一个很优秀的工程计算软件,除了强大的矩阵运算,仿真分析外,绘图功能也是相当的强大。但是由于Matlab本身的多线程编程缺陷(所谓多线程,就是MATLAB没法同时执行多个回调,只能排队一个一个的按顺序运行,Timer对象除外,它是MATLAB中唯一能够执行多线程的方法),想要动态的画图,并且能够很好的在GUI中得到控制,还不是一件很容易的事情。但是动画具有生动形象直观的好处,对我的教学、研究等都有不小的作用。那好,我在这里勉为其难的介绍下Matlab中是如何制作动画的。1动画的制作Matlab中动画实现的方法主要有下面三种1.1电影动画帖子地址:从不同的视角拍下一系列对象的图形,并保存到变量中,然后按照一定的顺序像电影一样播放。电影动画的好处就是,运行一次可以多次播放,甚至可以直接生成avi文件,直接独立与Matlab环境播放。这是其它三种动画制作方法所不具备的。MATLAB中,创建电影动画的过程分为以下四步:step1:调用moviein函数对内存进行初始化(该步骤在Matlab5.3以上均可省略),创建一个足够大的矩阵,使之能够容纳基于当前坐标轴大小的一系列指定的图形(此处称为帧)。step2:调用getframe函数生成每个帧。该函数返回一个列矢量,利用这个矢量,就可以创建一个电影动画矩阵。getframe函数可以捕捉动画帧,并保存到矩阵中。一般将该函数放到for循环中得到一系列的动画帧。该函数格式有:(1)F=gefframe,从当前图形框中得到动画帧(2)F=gefframe(h),从图形句柄h中得到动画帧(3)F=getframe(h,rect),从图形句柄h的指定区域rec中得到动画帧step3:调用movie函数按照指定的速度和次数运行该电影动画。当创建了一系列的动画帧后,可以利用movie函数播放这些动画帧。该函数的主要格式有:(1)movie(M),将矩阵M中的动画帧播放一次(2)movie(M,n),将矩阵M中的动画帧播放n次(3)movie(M,n,fps),将矩阵M中的动画帧以每秒fps帧的速度播放n次step4:调用movie2avi函数可以将矩阵中的一系列动画帧转换成视频文件avi文件。这样,即使脱离了matlab环境都可以播放动画。该方法的经典格式是:%录制电影动画forj=1:n%%这里输入我们的绘图命令%M(j)=getframe;endmovie(M)%单帧显示方法f=getframe(gcf);colormap(f.colormap);image(f.cdata);1.1.1电影动画演示实例(一)——千变万化的线条%bydynamic%seealso('toolbar','none','menubar','none','NumberTitle',...'off','name','电影动画录制——Matlabsky');axisequalm=moviein(20,gcf);%在当前窗口下,截取20帧set(gca,'nextplot','replacechildren','box','off','color','b','xgrid','on')title('截图当前窗口的20帧动画')forj=1:20plot(fft(eye(j+16)))m(:,j)=getframe(gcf);%截取动画帧,保存到m变量中endhh=figure('toolbar','none','menubar','none','NumberTitle',...'off','name','电影动画播放——Matlabsky');title('将截取的动画播放5遍')set(gca,{'xtick','ytick','xticklabel','yticklabel'},{[],[],[],[]})movie(hh,m,5)1.1.2电影动画演示实例(二)——跳动的红心帖子地址:=9489%byxiezhhx=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);axisequal;axisoff;light('Posi',[0-23]);%在(0,-2,3)点处建立一个光源lightingphongset(gca,'nextplot','replacechildren');%记录电影XX=get(p,'XData');YY=get(p,'YData');ZZ=get(p,'ZData');forj=1:20bili=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:设置重绘对象的擦除模式'EraseMode'模式Matlab的图形绘制函数允许采用不同的擦除模式来擦除原来的对象,不同的擦除模式将产生不同的动画效果。擦除模式是通过没置“EraseMode”属性来完成的,一共有三种擦除模式:none:重新绘制图形对象时不擦除原来的对象,这种模式可动态演示图形的生成过程,如曲线和旋转曲砸的生成过程background:在重新绘制图形对象之前。用背景色重绘对象来达到擦除原来图形对象的目的。该模式会擦除任何对象和它下面的任何图形Xor:在重新绘制图形对象之前,只擦除原来的对象,不会擦除其他对象或图形。这种模式能产生图形对象移动的效果step2:在循环语句中使用set更改图形的xdata,ydata和zdata等坐标数据step3:使用darwnow命令刷新屏幕该方法的经典格式是:%擦除重绘模式动画%选择一个擦除模式set(h,'erasemode',erasemode)%h是需要执行动画图像的句柄,一般都是由line或者plot创建%%需要执行一些图形计算命令%%循环语句中更新坐标数据,一般使用for或者whilefori=1:n%%必要的MATLAB命令%set(h,'xdata',xdata,'ydta',ydata)%更新图像的坐标数据drownnow%刷新屏幕%%其它Matlab语句%end1.2.1Matlab擦除重绘动画实例(一)——运动的小球functionf=anim_ball(K,ki)%%演示红色小球沿一条封闭旋螺线运动的实时动画%仅演示实时动画的调用格式为anim_ball(K)%既演示实时动画又拍摄照片的调用格式为f=anim_ball(K,ki)%K红球运动的循环数(不小于1)%ki指定拍摄照片的瞬间,取1到1034间的任意整数%f存储拍摄的照片数据,可用image(f.cdata)观察照片%产生封闭的运动轨线%%%bydynamic%allrightsreservedby=(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=[x1x2x3x4];y=[y1y2y3y4];z=[z1z2z3z4];h=figure('numbertitle','off','name','擦除动画演示(运动的小球)——Matlabsky')plot3(x,y,z,'b')axisoff%绘制红点%擦除模式设为xorh=line('Color',[100],'Marker','.','MarkerSize',40,'EraseMode','xor');n=length(x);i=1;j=1;%循环改变坐标,表现为小球运动while1if~ishandle(h),return,endset(h,'xdata',x(i),'ydata',y(i),'zdata',z(i));drawnow;pause(0.0005)%这里设置小球运动速度i=i+1;ifnargin==2&nargout==1if(i==ki&j==1);f=getframe(gcf);end%获取指定的帧,保存到f中endifin%判断是否运行了一周,是将i设置为1,并将运行周数j加1i=1;j=j+1;%判断是否到指定的运行周数,是,退出ifjK;break;endendend1.2.2Matlab擦除重绘动画实例(二)——单摆横梁%挂摆横梁%bydynamic%seealso=figure('numbertitle','off','name','擦除动画演示(挂摆横梁)——Matlabsky')%绘制横梁plot([-0.2;0.2],[0;0],'-k','linewidth',20);%画初始位置的单摆g=0.98;%重力加速度,可以调节摆的摆
本文标题:MATLAB-动画图-----作动态图
链接地址:https://www.777doc.com/doc-6139862 .html