MATLAB入门简单动画制作.ppt
《MATLAB入门简单动画制作.ppt》由会员分享,可在线阅读,更多相关《MATLAB入门简单动画制作.ppt(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MATLAB 程序设计入门篇动画制作张智星 清大资工系补充内容:方炜 台大生机系MATLAB 程式設計入門篇:動畫製作6-1 MATLAB 动画简介6-2 以电影方式产生动画 (a).电影动画之范例一 (b).电影动画之范例二 (c).电影动画之范例三6-3以对象方式产生动画 (a).曲线的动画 (b).曲线的 EraseMode (c).对象动画之范例MATLAB 程式設計入門篇:動畫製作6-1 MATLAB 动画简介nMATLAB 产生动画的方式有两种:n电影方式:n以影像的方式预存多个画面,再将这些画面快速的呈现在屏幕上,就可以得到动画的效果。此种方式类似于电影的原理,可以产生很缤纷亮丽
2、的动画,但是其缺点为每个画面都必需事先备妥,无法进行及时成像(Real-time Rendering),而且每个画面,以至于整套动画,都必需占用相当大的内存空间。n物件方式:n在 MATLAB 的握把式图形(Handle Graphics,详见本书第七章)概念下,所有的曲线或曲面均可被视为一个对象,MATLAB 可以很快的抹去旧曲线,并产生相似但不同的新曲线,此时就可以看到曲线随时间而变化的效果。使用对象方式(即握把式图形)所产生的动画,可以呈现实时的变化,也不需要太高的内存需求,但其缺点是较难产生太复杂的动画。MATLAB 程式設計入門篇:動畫製作6-2 以电影方式产生动画n以电影方式来产生
3、动画,可由下列两个步骤来达成:n使用 getframe 指令来抓取图形做为电影的画面,每个画面都是以一个行向量的方式,置放于整个代表电影的矩阵。n使用 movie 指令来播放电影,并可指定播放的重复次数及每秒播放的画面数目。MATLAB 程式設計入門篇:動畫製作电影动画之范例一n在下例中,我们将以不同的角度来显示 peaks 函数,并将其结果以电影的方式来呈现动画。n范例6-1:movie01.mclear M%清除电影资料矩阵 Mn=50;%抓取 50 个画面peaks;fprintf(抓取画面中.n);for i=1:nview(-37.5+i*360/n,30);%改变观测角度M(i)=
4、getframe;%抓取画面,并存入电影资料矩阵 Mendfprintf(播放电影中.n);movie(M,3);%播放电影三次MATLAB 程式設計入門篇:動畫製作电影动画之范例一n最后一个 frame 的画面MATLAB 程式設計入門篇:動畫製作电影动画之范例二n将 peaks 函数画在圆盘上,然后再变换此函数的高度,以动画呈现n范例6-2:movie02.mclear M%清除电影资料矩阵 Mr=linspace(0,4,30);%圆盘的半径t=linspace(0,2*pi,50);%圆盘的极坐标角度rr,tt=meshgrid(r,t);xx=rr.*cos(tt);%产生圆盘上的
5、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 次MATLAB 程式設計入門篇:動畫製作电影动画
6、之范例二n最后一个 frame 的画面MATLAB 程式設計入門篇:動畫製作电影动画之范例三n改变影像的色盘矩阵,让影像出现从正片变到负片的效果n范例6-3:movie03.mclear 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 endfpr
7、intf(播放电影中.n);movie(M,-5);%播放电影 5 次(含正向与逆向播放)MATLAB 程式設計入門篇:動畫製作电影动画之范例三n在上述范例中,正片(如下张投影片图左)的色盘矩阵是 map,而 1-map 则是负片(如下张投影片图右)的色盘矩阵,因此我们在抓影片时,让色盘矩阵进行渐进式的变化,因此呈现的电影就有从正片变到负片的效果。n另外,movie(M,-5)代表电影将播放 5 次,但由于第二个参数是负数,所以每次播放会包含一次正向播放及一次逆向播放。MATLAB 程式設計入門篇:動畫製作电影动画之范例三n正片n色盘矩阵是 mapn负片n色盘矩阵是 1-mapMATLAB 程
8、式設計入門篇:動畫製作电影动画的其他范例nMATLAB 的 demo 程序中亦包含了数个与电影方式相关的动画,读者可以在指令窗口输入下列任一指令:nxpmovie vibes nxpmovie logospinnxpmovie crulspinMATLAB 程式設計入門篇:動畫製作6-3以对象方式产生动画n以电影方式产生动画可以说是暴力法,因为此方法占掉了许多内存空间。另一个技巧性较高的方法则是以对象方式产生动画,此种方法不需要大量的内存,而且可以产生实时(Real-time)或交互式(Interactive)的动画。nMATLAB 的所有图形组件(曲线、曲面、图轴等)都是对象,您可以控制这些
9、对象的各种性质,此种特性称为握把式图形(Handle Graphics),可详见第七章。握把式图形包含的层面很广,但牵涉到动画部份的基本概念并不复杂,以下我们以曲线的动画来说明。MATLAB 程式設計入門篇:動畫製作曲线的动画n我们可以快速地改变图形对象的性质(如颜色、坐标等),就可以达到动画的效果n每一条曲线都有下列三种性质:nxdata:此为一向量,代表曲线的 x 坐标值nydata:此为一向量,代表曲线的 y 坐标值nEraseMode:此为一字符串,代表曲线被抹除的方式,亦即当 xdata 或 ydata 被改变时,对于旧曲线的处理方式。MATLAB 程式設計入門篇:動畫製作曲线的 E
10、raseModenEraseMode 对于动画的呈现相当重要,此字符串可是下列几种选择:nnormal:重画整个画面。nxor:将旧曲线的点以 xor 的方式还原。nbackground:将旧曲线的点改成背景颜色。nnone:保留旧曲线的点,不做任何处理。n在上述四种 EraseMode 中,耗费时间的次序是nnormal xor background nonenxor 和 background 很接近,但是 background 会抹去其他旧曲线所扫过的其他对象(如图轴、网格线、另一条曲线等),所以较少用到,所以一般在产生动画时,最常用到的 EraseMode 就是 xor。MATLAB 程
11、式設計入門篇:動畫製作曲线的动画n有了这些概念后,产生曲线的动画就很容易了!其主要步骤有两点:n产生一条曲线,其 EraseMode 为 xor,background,或 none。n在 for-loop 之中,改变此曲线的 xdata 或 ydata(或两者)。n我们产生一条随 x 而衰减的正弦曲线,并让 k 随时间而便大(即改变正弦波的相角),使整条曲线产生舞动的效果。MATLAB 程式設計入門篇:動畫製作对象动画之范例一n我们产生一条衰减的正弦曲线n让 k 随时间而便大(即改变正弦波的相角),使整条曲线产生舞动的效果。n范例6-1:movie04.mx=0:0.1:8*pi;h=plot
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 入门 简单 动画 制作
限制150内