欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    MATLAB入门简单动画制作.ppt

    • 资源ID:5438954       资源大小:292.50KB        全文页数:27页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    MATLAB入门简单动画制作.ppt

    MATLAB 程序设计入门篇动画制作,张智星 清大资工系补充内容:方炜 台大生机系,6-1 MATLAB 动画简介6-2 以电影方式产生动画(a).电影动画之范例一(b).电影动画之范例二(c).电影动画之范例三6-3以对象方式产生动画(a).曲线的动画(b).曲线的 EraseMode(c).对象动画之范例,6-1 MATLAB 动画简介,MATLAB 产生动画的方式有两种:电影方式:以影像的方式预存多个画面,再将这些画面快速的呈现在屏幕上,就可以得到动画的效果。此种方式类似于电影的原理,可以产生很缤纷亮丽的动画,但是其缺点为每个画面都必需事先备妥,无法进行及时成像(Real-time Rendering),而且每个画面,以至于整套动画,都必需占用相当大的内存空间。物件方式:在 MATLAB 的握把式图形(Handle Graphics,详见本书第七章)概念下,所有的曲线或曲面均可被视为一个对象,MATLAB 可以很快的抹去旧曲线,并产生相似但不同的新曲线,此时就可以看到曲线随时间而变化的效果。使用对象方式(即握把式图形)所产生的动画,可以呈现实时的变化,也不需要太高的内存需求,但其缺点是较难产生太复杂的动画。,6-2 以电影方式产生动画,以电影方式来产生动画,可由下列两个步骤来达成:使用 getframe 指令来抓取图形做为电影的画面,每个画面都是以一个行向量的方式,置放于整个代表电影的矩阵。使用 movie 指令来播放电影,并可指定播放的重复次数及每秒播放的画面数目。,电影动画之范例一,在下例中,我们将以不同的角度来显示 peaks 函数,并将其结果以电影的方式来呈现动画。范例6-1:movie01.m,clear M%清除电影资料矩阵 Mn=50;%抓取 50 个画面peaks;fprintf(抓取画面中.n);for i=1:nview(-37.5+i*360/n,30);%改变观测角度M(i)=getframe;%抓取画面,并存入电影资料矩阵 Mendfprintf(播放电影中.n);movie(M,3);%播放电影三次,电影动画之范例一,最后一个 frame 的画面,电影动画之范例二,将 peaks 函数画在圆盘上,然后再变换此函数的高度,以动画呈现范例6-2:movie02.m,clear M%清除电影资料矩阵 Mr=linspace(0,4,30);%圆盘的半径t=linspace(0,2*pi,50);%圆盘的极坐标角度rr,tt=meshgrid(r,t);xx=rr.*cos(tt);%产生圆盘上的 x 坐标yy=rr.*sin(tt);%产生圆盘上的 y 坐标zz=peaks(xx,yy);%产生 peaks 在极坐标的数据n=30;%抓取 30 个画面scale=cos(linspace(0,2*pi,n);fprintf(抓取画面中.n);for i=1:nsurf(xx,yy,zz*scale(i);%画图axis(-inf inf-inf inf-8.5 8.5);%固定图轴的范围box onM(i)=getframe;%抓取画面,并存入电影资料矩阵 M endfprintf(播放电影中.n);movie(M,5);%播放电影 5 次,电影动画之范例二,最后一个 frame 的画面,电影动画之范例三,改变影像的色盘矩阵,让影像出现从正片变到负片的效果范例6-3:movie03.m,clear M%清除电影资料矩阵 Mload clown.matimage(X);colormap(map);%画出小丑脸n=30;%抓取 30 个画面scale=cos(linspace(0,2*pi,n);fprintf(抓取画面中.n);for i=1:ncolormap(i-1)*(1-map)+(n-i)*map)/n);%改变色盘矩阵M(i)=getframe;%抓取画面,并存入电影资料矩阵 M endfprintf(播放电影中.n);movie(M,-5);%播放电影 5 次(含正向与逆向播放),电影动画之范例三,在上述范例中,正片(如下张投影片图左)的色盘矩阵是 map,而 1-map 则是负片(如下张投影片图右)的色盘矩阵,因此我们在抓影片时,让色盘矩阵进行渐进式的变化,因此呈现的电影就有从正片变到负片的效果。另外,movie(M,-5)代表电影将播放 5 次,但由于第二个参数是负数,所以每次播放会包含一次正向播放及一次逆向播放。,电影动画之范例三,正片色盘矩阵是 map,负片色盘矩阵是 1-map,电影动画的其他范例,MATLAB 的 demo 程序中亦包含了数个与电影方式相关的动画,读者可以在指令窗口输入下列任一指令:xpmovie vibes xpmovie logospinxpmovie crulspin,6-3以对象方式产生动画,以电影方式产生动画可以说是暴力法,因为此方法占掉了许多内存空间。另一个技巧性较高的方法则是以对象方式产生动画,此种方法不需要大量的内存,而且可以产生实时(Real-time)或交互式(Interactive)的动画。MATLAB 的所有图形组件(曲线、曲面、图轴等)都是对象,您可以控制这些对象的各种性质,此种特性称为握把式图形(Handle Graphics),可详见第七章。握把式图形包含的层面很广,但牵涉到动画部份的基本概念并不复杂,以下我们以曲线的动画来说明。,曲线的动画,我们可以快速地改变图形对象的性质(如颜色、坐标等),就可以达到动画的效果每一条曲线都有下列三种性质:xdata:此为一向量,代表曲线的 x 坐标值ydata:此为一向量,代表曲线的 y 坐标值EraseMode:此为一字符串,代表曲线被抹除的方式,亦即当 xdata 或 ydata 被改变时,对于旧曲线的处理方式。,曲线的 EraseMode,EraseMode 对于动画的呈现相当重要,此字符串可是下列几种选择:normal:重画整个画面。xor:将旧曲线的点以 xor 的方式还原。background:将旧曲线的点改成背景颜色。none:保留旧曲线的点,不做任何处理。在上述四种 EraseMode 中,耗费时间的次序是normal xor background nonexor 和 background 很接近,但是 background 会抹去其他旧曲线所扫过的其他对象(如图轴、网格线、另一条曲线等),所以较少用到,所以一般在产生动画时,最常用到的 EraseMode 就是 xor。,曲线的动画,有了这些概念后,产生曲线的动画就很容易了!其主要步骤有两点:产生一条曲线,其 EraseMode 为 xor,background,或 none。在 for-loop 之中,改变此曲线的 xdata 或 ydata(或两者)。我们产生一条随 x 而衰减的正弦曲线,并让 k 随时间而便大(即改变正弦波的相角),使整条曲线产生舞动的效果。,对象动画之范例一,我们产生一条衰减的正弦曲线让 k 随时间而便大(即改变正弦波的相角),使整条曲线产生舞动的效果。范例6-1:movie04.m,x=0:0.1:8*pi;h=plot(x,sin(x).*exp(-x/5),EraseMode,xor);axis(-inf inf-1 1);%设定图轴的范围grid on%画出网格线for i=1:5000y=sin(x+i/50).*exp(-x/5);set(h,ydata,y);%设定新的 y 坐标drawnow%立即作图end,对象动画之范例一,我们产生一条衰减的正弦曲线让 k 随时间而便大(即改变正弦波的相角),使整条曲线产生舞动的效果。范例6-1:movie04.m,x=0:0.1:8*pi;h=plot(x,sin(x).*exp(-x/5),EraseMode,xor);axis(-inf inf-1 1);%设定图轴的范围grid on%画出网格线for i=1:5000y=sin(x+i/50).*exp(-x/5);set(h,ydata,y);%设定新的 y 坐标drawnow%立即作图end,对象动画之范例一,最后一个 frame 的画面,对象动画之范例一,在上例中,我们使用 set 指令,总共改变曲线的 y 坐标 5000 次,并以 xor 的方式抹掉旧曲线。drawnow 的作用是使 MATLAB 立刻处理 set 指令,若无 drawnow,MATLAB 会累积 set 指令,直到 for-loop 结束时再一并处理图形的变化,这时就不会看到动画的效果。如果您将上例的 EraseMode 改成 background,则会发现曲线会“抹掉”图形中的网格线及代表图轴的直线。如果您将上例的 EraseMode 改成 none,则旧的曲线会被保留下来,产生不同的效果。,对象动画之范例:MATLAB,MATLAB 有很多对象动画之范例:lorenz:以3D动画呈现的 Lorenz 混沌方程式(Chaotic Equation),好像慧星在运行。truss:一座桥梁在地震时的震动方式,共有 12 种喔!travel:显示如何以杂乱搜寻(Random Search)的方式来解 Traveling Salesperson Problem.fitdemo:显示如何以 Downhill Simplex Search 来解决非线性曲线拟合(Nonlinear Curve Fitting)的问题。spinner:常见的屏幕保护程序。xphide:试试您的眼力。,对象动画之范例:Simulink,若您有安装 Simulink,可试试下列动态系统仿真加上动画呈现:onecart:传统的弹簧加上砝码的动态系统。dblcart1:一条弹簧加上两个砝码的动态系统。simppend:简单的单摆系统。dblpend1:两截的摆动系统。dblpend2:更复杂的摆动系统。penddemo:倒单摆系统。,对象动画之范例:模糊工具箱,如果您有安装 Fuzzy Logic Toolbox,可以试试由张老师开发的各项模拟及动画展示:fcmdemo:Fuzzy C-means Clustering。juggler:用板子接皮球。invkine:两截机器手臂的 Inverse Kinematics。slcp1:倒单摆,杆子长度随时间而变,您可以控制所欲到达的位置。slcpp1:双倒单摆,其中一个杆子的长度随时间而变,您可以控制所欲到达的位置。slbb:跷跷板加上滚球系统,您可以控制球的最后位置。sltbu:倒车入库系统,以对象方式产生动画,呈现一个小圆(半径为 1)在一个大圆(半径为 3)的圆周外部滚动的动画。,function mymovie02close alltheta=0:0.1:2*pi;r1=3;x1=r1*cos(theta);y1=r1*sin(theta);plot(x1,y1),axis image%大圆r2=1;center=(r1+r2)*1,0;x2=r2*cos(theta);y2=r2*sin(theta);h=line(center(1)+x2,center(2)+y2,EraseMode,xor,color,r);%小圆axis(-5 5-5 5);%设定图轴的范围n=5;%转5圈theta1=0:0.005:n*2*pi;for i=1:length(theta1);center=(r1+r2)*cos(theta1(i),sin(theta1(i);set(h,xdata,center(1)+x2,ydata,center(2)+y2);%设定小圆的 x,y 坐标drawnow%立即作图end,function mymovie02_2close alltheta=0:0.1:2*pi;r1=3;circle1=r1*exp(sqrt(-1)*theta);%大圆plot(circle1),axis imager2=1;circle2=r2*exp(sqrt(-1)*theta);%小圆center=r1+r2;h=line(real(center+circle2),imag(center+circle2),EraseMode,xor,color,r);axis(-5 5-5 5);%设定图轴的范围n=5;%转5圈theta1=0:0.005:n*2*pi;for i=1:length(theta1);center=(r1+r2)*exp(sqrt(-1)*(theta1(i);set(h,xdata,real(center+circle2),ydata,imag(center+circle2);%设定小圆的 x,y 坐标drawnow%立即作图end,以对象方式产生动画,呈现一个圆圈(半径为 1)由画面左边滚到右边,圆周上的任一点所拉出的一条摆线。,function cycloid01%摆线的动画,x=0:0.01:5*pi;theta=linspace(0,2*pi);r=1;circle=j+r*exp(sqrt(-1)*theta);subplot(2,1,1);circleH=plot(circle);axis imageset(circleH,erase,xor);axis(min(x)-r,max(x)+r,-0.5,2*r+0.5);dot1H=line(0,0,marker,o,color,k,erase,xor);dot2H=line(0,0,marker,.,color,r,erase,none);for i=1:length(x)set(circleH,xdata,x(i)+real(circle);angle=-pi/2-x(i);set(dot1H,xdata,x(i)+cos(angle),ydata,r+sin(angle);set(dot2H,xdata,x(i)+cos(angle),ydata,r+sin(angle);%line(xdata,x(i)+cos(angle),ydata,r+sin(angle),color,r,marker,.);drawnowend,以对象的方式产生动画,呈现下列方程式:y=cos2(x+k)*exp(-x/5)让 k 随时间而变大,来显示此方程式的动画。,function mymovie06x=0:0.1:8*pi;k=0;h=plot(x,cos(x+k).*cos(x+k).*exp(-x/5),EraseMode,xor);axis(-inf inf-1 1);%设定图轴的范围grid on%画出网格线for k=1:0.01:50y=cos(x+k).*cos(x+k).*exp(-x/5);set(h,ydata,y);%设定新的 y 坐标drawnow%立即作图end,

    注意事项

    本文(MATLAB入门简单动画制作.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开