《Matlab动画技术》PPT课件.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《《Matlab动画技术》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《Matlab动画技术》PPT课件.ppt(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、参考文献:基于Matlab的计算机图形与动画技术于万波 编著清华大学出版社,2007一、动画制作方法一、动画制作方法(一)时间函数(一)时间函数可以使用Timer函数创建计时器对象,如:Matlab提供了许多与动画制作相关的函数,能够比较容易完成动画的制作。1.Timer 函数函数mytimer=timer(TimerFcn,fPatch,StartDelay,6);start(mytimer)关键词当前目录中的程序名称,其程序见下一页。程序运行后,6秒钟后才执行程序。用start()函数激活计数器对象,6秒钟后才执行程序。程序:功能:使用patch函数绘制正方体网格图与表面图。vert=1
2、1 1;1 2 1;2 2 1;2 1 1;1 1 2;1 2 2;2 2 2;2 1 2;fac=1 2 3 4;2 6 7 3;4 3 7 8;1 5 8 4;1 2 6 5;5 6 7 8;subplot(1,3,1)patch(faces,fac,vertices,vert,FaceColor,w);view(3);subplot(1,3,2)patch(faces,fac,vertices,vert,FaceVertexCData,hsv(6),FaceColor,flat);view(3);subplot(1,3,3)patch(faces,fac,vertices,vert,Fa
3、ceVertexCData,hsv(8),FaceColor,interp);view(3);正方体网格图正方体网格图各面着色正方体各面着色正方体插值着色正方体插值着色正方体该计时器对象执行如下操作:一个计时器中可以同时对多个M文件进行不同的定时操作。如:当使用start函数启动计时器时执行file2;Mtimer=timer(TimerFcn,file1,StartFcn,file2,StopFcn,file3,ErrorFcn,file4)出错时执行file4。当使用stop函数终止计时器时执行file3;将file1作为基本计时器代码执行;l使用clock函数可以返回当前时间。2.当前日
4、期与时间当前日期与时间clock ans=1.0e+003当前机器时间是2006年9月19日20点31分秒。l使用now函数将返回当天的日期值。这个时间的单位是天,转换成普通日期是2008年8月21日19点30分53秒左右(误差小于1分钟)。format long;now ans=l使用datestr()函数可以将now函数返回的日期值转换成日期字符串。l使用date函数可以返回dd-mmm-yy格式的当天日期。date ans=21-Aug-2008 l使用datenum()函数可以将日期字符串变成日期值datenum(2008,8,21)ans=733641 ans=21-Aug-2008
5、 19:30:53 l函数cputime计算自当前Matlab程序启动之后到运行结束所占用的CPU时间(单位是秒)。3.计时函数计时函数t0=cputime;fpatch;cputime-t0 ans=程序的运行时间是秒。l函数etime计算两个时间向量的间隔。t1=clock;fpatch;etime(clock,t1)ans=程序的运行时间是秒。之所以比前面语句的计算时间少,是由于该程序已从硬盘装入等原因l计算运行时间的函数还有 tic 函数与 toc 函数,前者启动一个秒表,表示计时开始;后者则停止这个秒表,并且计算运行时间。tic;plot(rand(50,5);toc Elapsed
6、 time is 0.147644 seconds.pause()函数是延迟等待函数,例如,程序中如果出现pause(5),那么在执行到这句话的时候,停留5秒,然后继续。4.pause函数函数for i=-2*pi:0.5:2*piR=cos(i)sin(i)0;-sin(i)cos(i)0;0 0 1;vert=1 1 1;1 2 1;2 2 1;2 1 1;1 1 2;1 2 2;2 2 2;2 1 2;vert=vert*R;fac=1 2 3 4;2 6 7 3;4 3 7 8;1 5 8 4;1 2 6 5;5 6 7 8;pause(0.1)patch(faces,fac,vert
7、ices,vert,FaceVertexCData,hsv(8),FaceColor,interp);view(3)end例例 使用pause函数制作动画。程序是先绘制一个长方体,然后隔秒又绘制出另外一个长方体,新长方体的顶点坐标经过了变换,此变换是乘以矩阵R完成的,该矩阵是绕Z轴旋转矩阵。如此下去,绘制出下一页所示的图形,从而完成了此动画。如果没有pause(0.1),那么就直接绘制出上图,没有了动画效果。如果把 R=cos(i)sin(i)0;-sin(i)cos(i)0;0 0 1;变换成 R=cos(i)0 sin(i);0 1 0;-sin(i)0 cos(i);那么就是绕Y轴旋转。
8、(二)相机与视点(二)相机与视点相机与视点的概念与动画制作密切相关。1.函数函数camdolly()()surf(peaks)camdolly(i,0,0)pause(0.2)end表示左右移动 i 个单位,i 为正则向左,为负则向右。camdolly函数的第3个参数表示沿视轴移动。用来移动相机位置和目标位置camdolly(0,i,0)上下移动 i 个单位camdolly(0,i,0,fixtarget)只移动相机,物体不移动2.函数函数camorbit()与()与camroll()()surf(peaks)axis offfor i=1:36 camorbit(10,0,data,0 1
9、0)pause(0.2)endl函数camorbit(d1,d2)根据d1与d2的大小(单位是度)绕相机目标点旋转相机,d1表示水平旋转角度,d2表示垂直旋转角度。l函数camroll操纵相机绕视轴旋转a)camroll(d)按照d指定的大小绕相机视轴旋转相机,视轴由经过相机位置和相机目标点的直线确定。b)camroll(h,d)操作由第一个句柄参数h确定的坐标系。3.函数函数campan()()surf(peaks)axis vis3dfor i=1:720 campan(2,0)pause(0.01)endl函数campan(dt,dp)按照 dt 和 dp 的大小绕相机旋转目标点,dt
10、是水平旋转角度,dp 是垂直旋转角度。l函数campan还可以添加一个或两个参数campan(dt,dp,s1,s2)该程序绕相机位置水平旋转了72021440度,即4圈,转完后又回到原先位置,一共停留时间720秒。参数s1用来确定旋转中心,参数s2用来确定旋转轴。l该函数还可以在第一个参数位置上加入坐标系句柄,决定操作哪一个坐标系,默认是操作当前坐标系。4.函数函数campos()()surf(peaks)axis vis3d offfor x=-200:10:200 campos(x,0,0)drawnowendcampos该程序使相机沿x轴方向运动。axis vis3d off是取消了三
11、维视觉功能,取消三维视觉功能后不论是campos(x,0,0),还是campos(0,y,0),或是campos(x,y,z)效果都是垂直屏幕表面运动,可以更清晰的观察运动的情况。该函数设置或查询相机的位置,其调用格式如下:返回相机在当前坐标系中的位置campos(x,y,z)将相机位置设置为当前坐标系中(x,y,z)处为了验证campos函数不带参数时的功能,设计如下程序:a1=campossurf(peaks)a2=camposaxis vis3d offa3=camposfor x=-200:10:200 campos(x,0,0)drawnowenda4=camposa1=a2=a3=
12、a4=200 0 0该程序中设置了4个campos,返回了相机的4个位置,分别是:其中a1的值是相机默认位置,a4是程序运行完成后的相机位置。5.函数函数camtarget()()surf(peaks)for i=1:100 camtarget(i,0,0)pause(0.01)endcamtarget该程序使相机目标点(物体)沿x轴移动。该函数设置或查询相机目标点的位置,调用格式为:返回相机目标点在当前坐标系中的位置camtarget(x,y,z)将相机目标点位置设置为当前坐标系中(x,y,z)处改为camtarget(0,i,0)沿y轴移动改为camtarget(0,0,i)沿z轴移动6.
13、函数函数camva()与()与camzoom()()uicontrol(Style,pushbutton,String,In,.Position,20 20 60 20,Callback,if camva=179;return;else;camva(camva+1);end);camval函数camva()的调用格式是:返回当前坐标系设置的相机视角camva(a)将当前坐标系的相机视角设置为a,单位是度camzoom(f)l函数camzoom()的调用格式是:根据 f 的值对场景进行缩放。下面程序制作了两个按钮用来控制视角的改变。返回相机视角设置相机新的视角7.函数函数view()()view
14、(az,el)和 view(az,el)该函数指定视点方向,其调用格式为:设置三维图的视角。方位角 az 为从 y 轴的负轴开始绕 z 轴水平旋转的角度。正值表示视点逆时针旋转。el 为仰角。az 与 el 的单位为度。view(2)设置为默认二维视图,az=0,el90view(3)设置为默认三维视图,az,el30视角函数X,Y=meshgrid(-10:0.5:10);Z=X.2/36-Y.2/25+sin(X+Y)*2;x=X(1,:);y=Y(:,1);i=find(y0.1&y-3.6&x%n=length(x);i=2;j=1;while 1 set(h,xdata,x(i),y
15、data,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 end if in i=1;j=j+1;if jK;break;end endend(2)f=anim_zzy1(2,450);(3)image(f.cdata),axis off红球沿下旋螺线运动的瞬间照片红球沿下旋螺线运动的瞬间照片既演示实时动画又拍摄照片观察拍摄的照片二、动画制作原理二、动画制作原理 有时动画制作可以只凭借逐帧图像来完成,这些是基于图像的动画制作。三维动画主要是靠三维模
16、型的变换实现的,这些变换包括平移、旋转、错切、比例变换,其它线性变换、非线性变换等。因时间关系,这些内容在此不做介绍。动画制作的基本原理是把一些图形或图像快速逐帧播放,在人眼与人脑中产生连续的刺激,形成了动画。(一)基于图像的动画制作(一)基于图像的动画制作图像旋转图像旋转1.利用图像几何操作制作动画利用图像几何操作制作动画B=imread(D:112.bmp);for i=1:60 imrotate(B,i)end例例 制作图像旋转动画。这个程序把名称为的图像旋转60度,出现动画效果。图像作为一种特殊的图形,有着很强的描述自然的能力。在有些动画制作过程中,要充分的利用图像这个载体。距离变换距
17、离变换例例 使用cityblock距离制作动画。程序运行结果是随着 i 增加,图形边数增加,产生了动画效果。B1=zeros(50,50,50);B1(25,25,25)=1;D2=bwdist(B1,cityblock);for i=1:10 isosurface(D2,i),axis equal,view(3),axis off pause(0.2)end图像块移动图像块移动例例 利用图像块切割函数制作图像块移动动画。动画的效果是图像块在一个窗口中移动。A=imread(D:111.jpg);for i=1:20 A1=imcrop(A,i,i,i+20,i+30);imshow(A1)e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab动画技术 Matlab 动画 技术 PPT 课件
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内