《Matlab动画技术》PPT课件.ppt_第1页
《Matlab动画技术》PPT课件.ppt_第2页
《Matlab动画技术》PPT课件.ppt_第3页
《Matlab动画技术》PPT课件.ppt_第4页
《Matlab动画技术》PPT课件.ppt_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五讲 Matlab 动画技术,参考文献:,基于Matlab的计算机图形与动画技术,于万波 编著,清华大学出版社,2007,一、动画制作方法,(一)时间函数,可以使用Timer函数创建计时器对象,如:,Matlab提供了许多与动画制作相关的函数,能够比较容易完成动画的制作。,1. Timer 函数,mytimer=timer(TimerFcn,fPatch,StartDelay,6); start(mytimer),关键词,当前目录中的程序名称,其程序见下一页。,程序运行后,6秒钟后才执行程序fPatch.m。,用start()函数激活计数器对象,6秒钟后才执行程序fPatch.m。,程序:f

2、patch.m 功能:使用patch函数绘制正方体网格图与表面图。,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; 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

3、); subplot(1,3,3) patch(faces,fac,vertices,vert,FaceVertexCData,hsv(8),FaceColor,interp); view(3);,正方体网格图,各面着色正方体,插值着色正方体,该计时器对象执行如下操作:,一个计时器中可以同时对多个M文件进行不同的定时操作。如:,当使用start函数启动计时器时执行file2;,Mtimer=timer(TimerFcn,file1,StartFcn, file2,StopFcn, file3,ErrorFcn, file4),出错时执行file4。,当使用stop函数终止计时器时执行file3

4、;,将file1作为基本计时器代码执行;,使用clock函数可以返回当前时间。,2. 当前日期与时间,clock ans= 1.0e+003 2.0060 0.0090 0.0190 0.020 0.0310 0.0384,当前机器时间是2006年9月19日20点31分38.4秒。,使用now函数将返回当天的日期值。,这个时间的单位是天,转换成普通日期是2008年8月21日19点30分53秒左右(误差小于1分钟)。,format long;now ans = 7.336418131145024e+005,使用datestr()函数可以将now函数返回的日期值转换成日期字符串。,使用date函数

5、可以返回dd-mmm-yy格式的当天日期。,date ans= 21-Aug-2008,使用datenum()函数可以将日期字符串变成日期值,datenum(2008,8,21) ans= 733641,datestr(7.336418131145024e+005) ans= 21-Aug-2008 19:30:53,函数cputime计算自当前Matlab程序启动之后到运行结束所占用的CPU时间(单位是秒)。,3. 计时函数,t0=cputime;fpatch;cputime-t0 ans= 0.0156,程序fpatch.m的运行时间是0.0156秒。,函数etime计算两个时间向量的间隔

6、。,t1=clock;fpatch;etime(clock,t1) ans = 0.0150,程序fpatch.m的运行时间是0.0150秒。之所以比前面语句的计算时间少,是由于该程序已从硬盘装入等原因,计算运行时间的函数还有 tic 函数与 toc 函数,前者启动一个秒表,表示计时开始;后者则停止这个秒表,并且计算运行时间。,tic;plot(rand(50,5);toc Elapsed time is 0.147644 seconds.,pause()函数是延迟等待函数,例如,程序中如果出现pause(5),那么在执行到这句话的时候,停留5秒,然后继续。,4. pause函数,for i=

7、-2*pi:0.5:2*pi R=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,vertices,vert,FaceVertexCData,hsv(8),FaceColor,interp); view(3) end,例 使用pause函数制作动画。,程序是先绘制一个长方体

8、,然后隔0.1秒又绘制出另外一个长方体,新长方体的顶点坐标经过了变换,此变换是乘以矩阵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轴旋转。,(二)相机与视点,相机与视点的概念与动画制作密切相关。,1. 函数camdolly(),surf(peaks) for i=0:0.05:0.5 ca

9、mdolly(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 off for i=1:36 camorbit(10,0,data,0 1 0) pause(0.2) end,函数camorbit(d1,d2) 根据d1与d2的大小(单位是度)绕相机目标点旋

10、转相机,d1表示水平旋转角度,d2表示垂直旋转角度。,函数camroll操纵相机绕视轴旋转,camroll(d)按照d指定的大小绕相机视轴旋转相机,视轴由经过相机位置和相机目标点的直线确定。,camroll(h,d)操作由第一个句柄参数h确定的坐标系。,3. 函数campan(),surf(peaks) axis vis3d for i=1:720 campan(2,0) pause(0.01) end,函数campan(dt,dp) 按照 dt 和 dp 的大小绕相机旋转目标点,dt 是水平旋转角度,dp 是垂直旋转角度。,函数campan还可以添加一个或两个参数,campan(dt,dp,

11、s1,s2),该程序绕相机位置水平旋转了72021440度,即4圈,转完后又回到原先位置,一共停留时间7200.017.2秒。,参数s1用来确定旋转中心,参数s2用来确定旋转轴。,该函数还可以在第一个参数位置上加入坐标系句柄,决定操作哪一个坐标系,默认是操作当前坐标系。,4. 函数campos(),surf(peaks) axis vis3d off for x=-200:10:200 campos(x,0,0) drawnow end,campos,该程序使相机沿x轴方向运动。 axis vis3d off是取消了三维视觉功能,取消三维视觉功能后不论是campos(x,0,0) ,还是cam

12、pos(0,y,0) ,或是campos(x,y,z)效果都是垂直屏幕表面运动,可以更清晰的观察运动的情况。,该函数设置或查询相机的位置,其调用格式如下:,返回相机在当前坐标系中的位置,campos(x,y,z),将相机位置设置为当前坐标系中(x,y,z)处,为了验证campos函数不带参数时的功能,设计如下程序:,a1= campos surf(peaks) a2= campos axis vis3d off a3= campos for x=-200:10:200 campos(x,0,0) drawnow end a4= campos,a1 = 0.5000 0.5000 9.1603

13、a2 = -203.2855 -327.0090 86.6025 a3 = -194.1541 -317.7286 83.9027 a4 = 200 0 0,该程序中设置了4个campos,返回了相机的4个位置,分别是:,其中a1的值是相机默认位置,a4是程序运行完成后的相机位置。,5. 函数camtarget(),surf(peaks) for i=1:100 camtarget(i,0,0) pause(0.01) end,camtarget,该程序使相机目标点(物体)沿x轴移动。,该函数设置或查询相机目标点的位置,调用格式为:,返回相机目标点在当前坐标系中的位置,camtarget (x

14、,y,z),将相机目标点位置设置为当前坐标系中(x,y,z)处,改为camtarget(0,i,0),沿y轴移动,改为camtarget(0,0,i),沿z轴移动,6. 函数camva()与camzoom(),uicontrol(Style,pushbutton,String,In,. Position,20 20 60 20,Callback,if camva=179;return;else;camva(camva+1);end);,camva,函数camva()的调用格式是:,返回当前坐标系设置的相机视角,camva(a),将当前坐标系的相机视角设置为a,单位是度,camzoom(f),函

15、数camzoom()的调用格式是:,根据 f 的值对场景进行缩放。,下面程序制作了两个按钮用来控制视角的改变。,返回相机视角,设置相机新的视角,7. 函数view(),view(az,el) 和 view(az,el),该函数指定视点方向,其调用格式为:,设置三维图的视角。方位角 az 为从 y 轴的负轴开始绕 z 轴水平旋转的角度。正值表示视点逆时针旋转。el 为仰角。az 与 el 的单位为度。,view(2),设置为默认二维视图,az=0,el90,view(3),设置为默认三维视图,az=-37.5,el30,视角函数,X,Y=meshgrid(-10:0.5:10); Z=X.2/3

16、6-Y.2/25+sin(X+Y)*2; x=X(1,:); y=Y(:,1); i=find(y0.1 ,例 使用函数view()从不同角度观察图形。,上述程序运行后结果如下图所示,4个图形分别是不同视角下显示的同一个曲面。,1. 程序动画,从计算机图形学上看,动画就是绘制的图形发生变化。这个变化不能太快,也不能太慢,要被人的视觉接受。在程序执行时,能够使图形变化达到视觉要求。,例 程序动画制作。 下面程序就完成了一个动画。,X,Y=meshgrid(-10:1:10); Z=X.2/36-Y.2/25; h=mesh(Z) for i=1:10:360 rotate(h,20,3,56,i

17、) pause(0.1) end,(三)程序动画与电影动画,程序中rotate函数是Matlab提供的一个图形变换函数。函数rotate(h,20,3,56,i)中, h是图形句柄,表示Mesh(Z)绘制的图形;20,3,56决定了旋转轴方向;i表示旋转角度,单位是度。,程序运行后,观看到的效果是一个面片在飞舞。为了更好的观察面片的变化情况,改动上面程序为:,for i=1:6 subplot(2,3,i) X,Y=meshgrid(-10:1:10); Z=X.2/36-Y.2/25; h=mesh(Z) rotate(h,20,3,56,i*55) axis tight off pause

18、(0.1) end,绘制出的动画效果比较好,为了仔细观察,下图截取了动画的一些中间图形。,这些图形是旋转时一些变化瞬间的图形。面片是一样的,只不过是旋转过程中看到的各个不同侧面而已。,程序动画很多时候借助pause函数来完成。,2. 绘制图形制作电影动画,Matlab提供了动画制作函数movie,使用movie函数生成动画就称为电影动画。生成动画必须有很多帧图形连续播放,如果这些图形是绘制而成的,就叫这种动画为绘制图形的电影动画。,程序中使用了moviein函数创建一个结构体数组,专门用来装载动画的各帧;使用getframe函数(命令)把绘制出的图形装入结构体。其中,绘制每一帧图形之前,先使用

19、了FFT变换函数。程序最后一句是播放函数,以每秒5幅的速度播放画面。,M=moviein(16); for j=1:16 plot(fft(eye(j+16); axis equal M(:,j)=getframe; pause(0.1) end movie(M,5),例 播放一个不断变化的眼球程序段。,getframe函数,getframe函数可将当前图形窗口作为一个画面取下并保存,格式为:m=getframe。它将每一帧画面信息数据截取下来整理成列向量。该函数截取图形的点阵信息,图形窗口的大小,对数据向量的大小影响较大,窗口越大,所需存储容量越大。而图形的复杂性对数据容量要求没有直接的关系

20、。,moviein函数,函数m=moviein(n)用来建立一个足够大的 n 列的矩阵 m,用来保存 n 幅画面的数据,以备播放。,movie(m,k)以每秒 k 幅图形的速度播放由矩阵 m 的列向量所组成的画面。,movie函数,改动前面的程序如下,能够制作出新的动画。,右边程序可以观察到一个椭圆转化成矩形的过程。,左边程序演示一个球体从多面体演化来的过程。,M=moviein(16); for j=1:16 sphere(j); axis equal M(:,j)=getframe; end movie(M,10),M=moviein(16); for j=16:-1:1 rectangl

21、e(Position,4,5,15,10,Curvature,j/16); M(:,j)=getframe; axis equal end movie(M,2),3. 基于图像制作电影动画,动画效果是由于一幅幅图形变化产生的,如果这些图形来自于图像,那么就称该动画为基于图像的动画。,(a) 1.jpg (b) 2.jpg (c) 3.jpg,下列3个图象是用画图工具绘制出来的,分别命名为1.jpg、2.jpg与3.jpg,存储在D盘根目录下。,制作动画的三幅图像,for i=1:3 k=int2str(i); k1=strcat(d:,k,.jpg); a1=imread(k1); image

22、(a1); m(:,i)=getframe end movie(m,10),下面程序使用getframe函数装载上述几幅图像,使用movie函数播放这几幅图像就是一个动画。,4. 几个例题,例 下述程序播放一个直径不断变化的球体。,n=30 x,y,z=sphere m=moviein(n); for j=1:n surf(j*x,j*y,j*z) m(:,j)=getframe; end movie(m,30);,例 三维图形的影片动画。,clf;shg, x=3*pi*(-1:0.05:1); y=x; X,Y=meshgrid(x,y); R=sqrt(X.2+Y.2)+eps; Z=s

23、in(R)./R; h=surf(X,Y,Z); colormap(jet); axis off n=12; mmm=moviein(n); for i=1:n rotate(h,0 0 1,25); mmm(:,i)=getframe; end movie(mmm,5,10),function f=anim_zzy1(K,ki) % anim_zzy1.m 演示红色小球沿一条封闭螺线运动的实时动画 % 仅演示实时动画的调用格式为 anim_zzy1(K) % 既演示实时动画又拍摄照片的调用格式为 f=anim_zzy1(K,ki) % K 红球运动的循环数(不小于1) % ki 指定拍摄照片

24、的瞬间,取 1 到 1034 间的任意整数。 % f 存储拍摄的照片数据,可用image(f.cdata)观察照片。 %,例 制作红色小球沿一条带封闭路径的下旋螺线运动的实时动画。,(1)程序名为anim_zzy1.m,程序如下:,(接下一页),t1=(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;

25、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; plot3(x,y,z,Color,1,0.6,0.4,LineWidth,2.5) axis off % h=line(xdata,x(1),ydata,y(1),zdata,z(1),Color,1 0 0,Marker, ., MarkerSize,40,EraseMode,xor); % n=length(x);i=2;j=1; while 1 set(h,xdata,x(i),ydata,y(i),zdata,z(i); dr

26、awnow; pause(0.0005) i=i+1; if nargin=2 end end end,(2)f=anim_zzy1(2,450);,(3)image(f.cdata),axis off,红球沿下旋螺线运动的瞬间照片,既演示实时动画又拍摄照片,观察拍摄的照片,二、动画制作原理,有时动画制作可以只凭借逐帧图像来完成,这些是基于图像的动画制作。,三维动画主要是靠三维模型的变换实现的,这些变换包括平移、旋转、错切、比例变换,其它线性变换、非线性变换等。因时间关系,这些内容在此不做介绍。,动画制作的基本原理是把一些图形或图像快速逐帧播放,在人眼与人脑中产生连续的刺激,形成了动画。,(一

27、)基于图像的动画制作,图像旋转,1. 利用图像几何操作制作动画,B=imread(D:112.bmp); for i=1:60 imrotate(B,i) end,例 制作图像旋转动画。,这个程序把名称为112.bmp的图像旋转60度,出现动画效果。,图像作为一种特殊的图形,有着很强的描述自然的能力。在有些动画制作过程中,要充分的利用图像这个载体。,距离变换,例 使用cityblock距离制作动画。,程序运行结果是随着 i 增加,图形边数增加,产生了动画效果。,B1=zeros(50,50,50); B1(25,25,25)=1; D2=bwdist(B1, cityblock); for i

28、=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) end,例 图像块逐渐放大制作出的动画效果。,程序的运行结果使图像块逐渐扩大,形成动画。,A=imread(D:111.jpg); for i=1:70 A1=imcrop(A,80-i,80-i,i+20,i+30); imsho

29、w(A1) end,图像颜色,2. 基于图像颜色与亮度的动画制作,I=imread(D:111.jpg); I1=I(:,:,2); s=size(I1); a=ones(s(1),s(2); I2=double(I1); for i=1:50 I2(:,:)= I2(:,:)-a*i; I (:,:,2)= I2(:,:); imshow(I) end,例 逐渐减少RGB图像的绿色成分,完成一个颜色渐变的动画。,程序的运行结果是一个颜色渐变的动画。,I=imread(D:111.jpg); I1=I(:,:,2); s=size(I1); a=ones(s(1),s(2); I2=doubl

30、e(I1); for i=1:8 I2(:,:)= I2(:,:)-a*i*5; subplot(2,4,i) I (:,:,2)= I2(:,:); imshow(I) end,为了把颜色渐变情况展示出来,下面程序绘制出一些中间帧。,I=imread(D:face001.jpg); I1=I(:,:,1); s=size(I1); a=ones(s(1),s(2); I2=double(I1); for i=1:50 I2(:,:)= I2(:,:)-a*i; I (:,:,1)= I2(:,:); imshow(I) end,例 逐渐减少一幅彩色(RGB图像)人脸照片的红色成分,完成一个颜

31、色渐变的动画。,程序中照片文件D:face001.jpg是以红色为背景的,经过渐变,红色背景逐渐消失。,图像亮度,I=imread(D:face001.jpg); I1=rgb2gray(I); s=size(I1); a=ones(s(1),s(2); I2=double(I1); for i=1:30 I2(:,:)= I2(:,:)-a*i; imshow(I2) end,例 逐渐减少灰度图像的亮度,完成一个亮度渐变的动画。,该程序完成了一个亮度渐变动画。,为了把亮度渐变情况记录下来,使用下面程序把一些中间帧绘制出来。,I=imread(D:flower1.bmp); I1=rgb2gr

32、ay(I); s=size(I1); a=ones(s(1),s(2); I2=double(I1); for i=8:22 I2(:,:)= I2(:,:)-a*i; subplot(3,5,i-7) imshow(I2) end,上述程序的运行结果如下图所示:,右图为彩色图像D:flower1.bmp,图像膨胀与腐蚀的动画效果,3. 图像处理与分析用于动画制作,例 使用膨胀与腐蚀制作动画。,程序的运行结果是演示图像逐渐被腐蚀与膨胀的过程。,许多图像处理与分析的方法都可以用于图像动画制作,下面以图像膨胀与腐蚀以及图像的Radon变换为例简单介绍。,A=imread(D:flower1.bmp

33、); A1=rgb2gray(A); for i=1:6 se=strel(square,i); A2=imdilate(A1,se); A3=imerode(A1,se); subplot(1,2,1),imshow(A2); subplot(1,2,2),imshow(A3); pause(0.2) end,图像变换,例 使用Radon变换制作动画。,程序的演示结果是随着角度的增加,Radon 变换变化的结果。,A=imread(D:111.jpg); A1=rgb2gray(A); for i=0:5:60 R,xp =radon(A,i) imagesc(i,xp,R); pause(

34、0.2) end,(二)动画的分类制作方法,另外,从图形空间维数可以分为二维动画与三维动画。,从动画的表现上可以分为真实感动画与非真实感动画;,一般从制作动画所用素材、制作方法、制作工具等多个角度对动画进行分类,也可以从观赏者是否干预、场景是否运动等对动画进行分类。,从动画制作所用素材可以分为图形动画与图像动画等;,从动画的制作方法可以分为逐帧动画、形变动画与路径动画;,从制作工具上可以分为语言制作动画与软件制作动画;,从观赏者是否参与可以分为普通动画与虚拟现实动画;,逐帧动画,1. 逐帧动画、形变动画与路径动画,可以使用Matlab中的函数moviein()与getframe等完成逐帧动画设

35、计,使用函数movie()播放逐帧动画。,逐帧动画、形变动画与路径动画是三种基本的动画制作方式,每个动画制作软件都提供这三种动画制作方法。这里研究如何使用Matlab语言实现这三种动画。一方面,在以后的实际应用中,可以直接使用语言进行动画设计;另一方面,可以探索动画制作软件的开发机理,以便更好的使用动画制作软件。,在前面介绍的动画制作方法中,电影动画制作中有一段程序,程序完成了一个简单的逐帧动画。,该程序段就是使用了moviein()、getframe与movie()这几个函数,完成了一个从多面体转化成球体的动画。其实,这几个函数是通用的逐帧动画制作函数,利用这几个函数,可以制作出各种各样的逐

36、帧动画。,M=moviein(16); for j=1:16 sphere(j); axis equal M(:,j)=getframe; end movie(M,10),for i=1:15 k=int2str(i); k1=strcat(D:picture,k,.jpg); a1=imread(k1); image(a1); m(:,i)=getframe; end movie(m,2),例 修改前述的动画制作程序,完成编号图像动画制作。,一共15张墙纸图片,存储在D:picture文件夹下。,从上例可以看到,只要把图像编号,就可以制作出逐帧动画,也就是可以完成序列图像播放。目前,有些动画

37、作品就是先手工绘制,然后扫入计算机,进行动画编辑与制作。制作的方法与上例类似。,软件制作逐帧动画与语言制作逐帧动画本质上是相同的。软件Flash与3D MAX等都提供了逐帧动画制作功能,其方法也是把每一帧图像或图形存入播放数组,然后进行逐帧播放。,形变动画,动画制作软件都提供了形变动画制作功能。首先给定一个物体的初始形状,然后给定终止形状,中间过程的各个帧使用插值计算来实现。,插值计算的关键是找好初始与终结两个时刻的对应顶点(关键点),然后计算中间各帧的顶点(关键点),最后,使用类似 surf 的函数绘制每一帧。,一般的形变动画都是靠计算给出中间帧,这虽然增加了计算时间,但是不需要存储大量的中

38、间图像(图形),节省了存储空间。,例 作动画演示peaks图形逐渐趋近于平面的过程。,p=peaks(11); h=axes(Position,0,0,1,1,visible,off) for i=1:10 p1=p/i;surf(p1) set(h,Zlim,0 10) axis off; pause(0.3) end,程序运行时,随着i的增加,曲面的高度逐渐缩小,形成了动画效果。为了更好的观察,设置固定了坐标系的Z轴范围为0 10。,例 作动画演示一个图形逐渐演化成peaks图形的过程。,p=peaks(16);s=sphere(15); for i=30:-2:1 p1=s+p/i;su

39、rf(p1);axis off;pause(0.1); end,程序中,先使用peaks函数产生图形数据,再使用sphere函数产生数据,然后对这些数据进行组合,实现从一个图形到peaks图形的转变。下图是一些中间帧。,注:sphere函数产生数据后,使用surf函数对这些数据进行绘制不能产生球体。而是类似于上图中的第一个图形。,X1,Y1,Z1= peaks(16); X2,Y2,Z2=sphere(15); for i=1:5:100 Z3=Z1/i+Z2; surf(X2,Y2,Z3) axis square off pause(0.1) end,如果演示从 sphere 曲面变成一个球

40、体,可以使用下面程序。,路径动画,路径动画制作方法也是动画制作软件常用的一个方法。首先为动画设定一个路径,路径可以是规则的几何曲线,也可以是手工绘制的曲线;然后先把物体放到始点位置,再放到终点位置,确认后,让物体沿曲线运动。,三维物体路径动画制作过程中,需要处理好消隐问题。根据使用的具体语言或软件来处理消隐问题,Matlab语言函数可以自动实现消隐,三维软件也都可以自动处理消隐问题;但是象C 语言、VB等就没有提供这方面的功能。,使用Matlab可以很容易地实现路径动画。,例 作一个球体沿一段正弦曲线运动。,x=0:0.1:1; y=sin(x); h=axes(Position,0,0,0.

41、1,0.1) for i=1:10 set(h,Position,x(i),y(i),0.1,0.1) sphere(15); axis off pause(0.1) end,因为程序中的正弦曲线是自变量取 01 之间的一段,所以,看上去像是沿直线运动。程序关键是每次重新设置绘图坐标轴的起始位置。,例 作一个球体沿正弦曲线运动一个周期。,修改前一页中的程序如下:,该程序能够实现一个球体沿正弦曲线运动一个周期。如下图所示。,x=0:0.1:2*pi; y=sin(x); h=axes(Position,0,0,0.1,0.1) for i=1:62 set(h,Position,x(i)/(2*pi),y(i)/(2*pi)+0.5,0.1,0.1) sphere(15);axis off;pause(0.1); end,图中的曲线是使用语句后加入的。,例 作一个球体沿随机曲线运动。,下例演示的是一个球体沿随机曲线运动的动画。,y=rand(1,30); axis off h1=axes(Position,0,0,1,1) plot(y) axis off h=axes(Position,0,0,0.1,0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论