MATLAB_动画图_____作动态图

上传人:ZJ****2 文档编号:42681253 上传时间:2018-06-03 格式:DOC 页数:28 大小:466KB
返回 下载 相关 举报
MATLAB_动画图_____作动态图_第1页
第1页 / 共28页
MATLAB_动画图_____作动态图_第2页
第2页 / 共28页
MATLAB_动画图_____作动态图_第3页
第3页 / 共28页
MATLAB_动画图_____作动态图_第4页
第4页 / 共28页
MATLAB_动画图_____作动态图_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《MATLAB_动画图_____作动态图》由会员分享,可在线阅读,更多相关《MATLAB_动画图_____作动态图(28页珍藏版)》请在金锄头文库上搜索。

1、 MATLAB 技术论 坛电子期刊编辑:编辑:xiezhh制作:制作:MATLAB 技术论坛版权:版权:MatlabSky版权所有网址:网址:http:/ 第第 1 期期2010.09No.1中国权威中国权威 MATLAB 论坛核心期刊论坛核心期刊MATLABMATLAB 技术论坛简介技术论坛简介目目 录录1 动画的制作1.1 电影动画1.1.1 电影动画演示实例(一)千变万化的线条1.1.2 电影动画演示实例(二)跳动的红心1.2 擦除动画1.2.1 Matlab 擦除重绘动画实例(一)运动的小球1.2.2 Matlab 擦除重绘动画实例(二)单摆横梁1.2.3 Matlab 擦除重绘动画实

2、例(三)时钟演示1.2.4 Matlab 擦除重绘动画实例(四)小球绕跑道运动1.3 质点动画1.3.1 质点动画演示(一)1.3.2 质点动画演示(二)平抛运动1.3.3 质点动画演示(三)导弹发射1.4 霓虹灯效果动画1.4.1 霓虹灯效果动画实例(一) 霓虹闪烁的球体1.4.2 霓虹灯效果动画实例(二) 一颗花心1.5 GIF 格式动画制作1.5.1 GIF 格式动画制作案例绕螺旋线运动的小球2 动画的保存3 有关动画制作的实验报告4 更多动画实例4.1 电影动画演示旋转的山峰 4.2 擦除动画实例卫星绕地球运动(注释很详细) 4.3 擦除动画实例太阳地球月亮卫星,绕转演示动画(注释很详

3、细)5 光学夫朗和费衍射现象模拟 MATLAB 源代码6 牛顿环动画演示 MATLAB 源代码7 使用 MATLAB 绘制原子轨道和电子云图形8 振动摆 MATLAB 动画源代码MATLAB 基础应用版块基础应用版块Matlab 中动画的实现、制作和保存http:/ 的确是一个很优秀的工程计算软件,除了强大的矩阵运算,仿真分析外,绘图功能也是相当的强大。但是由于 Matlab 本身的多线程编程缺陷(所谓多线程,就是 MATLAB 没法同时执行多个回调,只能排队一个一个的按顺序运行,Timer 对象除外,它是 MATLAB 中唯一能够执行多线程的方法),想要动态的画图,并且能够很好的在 GUI

4、中得到控制,还不是一件很容易的事情。但是动画具有生动形象直观的好处,对我的教学、研究等都有不小的作用。那好,我在这里勉为其难的介绍下 Matlab 中是如何制作动画的。1 动画的制作Matlab 中动画实现的方法主要有下面三种1.1 电影动画 帖子地址:http:/ avi 文件,直接独立与 Matlab 环境播放。这是其它三种动画制作方法所不具备的。MATLAB 中,创建电影动画的过程分为以下四步:step1:调用 moviein 函数对内存进行初始化(该步骤在 Matlab5.3 以上均可省略),创建一个足够大的矩阵,使之能够容纳基于当前坐标轴大小的一系列指定的图形(此处称为帧)。step

5、2:调用 getframe 函数生成每个帧。该函数返回一个列矢量,利用这个矢量,就可以创建一个电影动画矩阵。getframe 函数可以捕捉动画帧,并保存到矩阵中。一般将该函数放到 for 循环中得到一系列的动画帧。该函数格式有:(1)F=gefframe,从当前图形框中得到动画帧(2)F=gefframe(h),从图形句柄 h 中得到动画帧(3)F=getframe(h,rect),从图形句柄 h 的指定区域 rec 中得到动画帧step3:调用 movie 函数按照指定的速度和次数运行该电影动画。当创建了一系列的动画帧后,可以利用 movie 函数播放这些动画帧。该函数的主要格式有:(1)m

6、ovie(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);colormap(f.colormap);im

7、age(f.cdata);1.1.1 电影动画演示实例(一)千变万化的线条%by dynamic%see also http:/%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 plot(fft(

8、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 电影动画演示实例(二)跳动的红心帖子地址:http:/ by xiezhhx = linspace(-2,2,100);X,Y,Z = meshgrid(x,x,x); I1 = (

9、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,replacechildren);% 记录电影XX = get(p,XData);YY = get(p,YData);ZZ = get(p,ZData);for

10、 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 擦除动画帖子地址:http:/ 中使用最多的方法。使用 Matlab 的绘图函数不断重复绘制图形对象,重绘过程中递增式地改变图形对象 位置将产生动画效果。在重绘对象的过程中之所以能产生动画效果是由于对原来的图形对 象进行了擦除处理。 MATLAB 中,创建擦除重绘动画的过程分为以下三步: step1:设置重绘对象的擦除模式EraseMode模式 Matl

11、ab 的图形绘制函数允许采用不同的擦除模式来擦除原来的对象,不同的擦除模式 将产生不同的动画效果。擦除模式是通过没置“EraseMode”属性来完成的,一共有三种 擦除模式: none:重新绘制图形对象时不擦除原来的对象,这种模式可动态演示图形的生成过程, 如曲线和旋转曲砸的生成过程background:在重新绘制图形对象之前。用背景色重绘对象来达到擦除原来图形对象 的目的。该模式会擦除任何对象和它下面的任何图形 Xor:在重新绘制图形对象之前,只擦除原来的对象,不会擦除其他对象或图形。这 种模式能产生图形对象移动的效果 step2:在循环语句中使用 set 更改图形的 xdata,ydata

12、 和 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 擦除重绘动画实例(一)运动

13、的小球function 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 http:/%2007.10.26%t1=(0:1000)/1000*10*pi;x1=cos(t

14、1);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 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);drawnow;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号