MATLAB中的动画设计
MATLAB制作动画的方法

MATLAB制作动画的方法目录梗概电影动画及应用程序动画及应用总结MATLAB制作动画的方法制作动画的方法? MATLAB中,动画的创建有两种方法:电影动画:首先保存一系列的图形,然后按电影动画照一定的顺序像电影一样的播放。
程序动画:在图形窗口中按照一定的算法连程序动画续擦除和重绘图形对象。
电影动画及应用? 电影动画的步骤:调用moviein函数对内存进行初始化,创建一个足够大的矩阵,使之能够容纳基于当前坐标大小的一系列指定的图形(此处称为帧)。
调用getframe函数生成每个帧。
该函数返回一个列矢量,利用这个矢量,就可以创建一个电影动画矩阵。
调用movie函数按照指定的速度进行指定次数播放该电影动画。
电影动画的应用(1) 电影动画的应用电影动画的应用(1) 电影动画的应用电影动画的应用(2) 电影动画的应用程序动画及应用? 在MATLAB中,可以采用重绘图形对象重绘图形对象的方法来创重绘图形对象建程序动画。
改变对象的方法可以触发MATLAB对该对象进行重绘。
? 创建程序动画的典型步骤是:绘制一个图形对象,通过在一个程序循环中改变该对象的x,y和z坐标值来实现该对象的移动,从而形成动画。
? 在创建MATLAB的程序动画时,图形擦除图形擦除也是非常图形擦除重要的。
程序动画及应用? 图形动态绘画中三种重要的擦除模式:None:在移动图形对象时,MATLAB 不进行擦除;Background:在图形对象移走以后,MATLAB在原来的位置用背景色进行重绘。
在这种模式下,MATLAB 将原来的对象完全擦除,包括该对象下面的所有图形,如栅格线等;Xor:与Background模式相比,这种模式只擦除对象本身。
大多数的MATLAB 程序动画都采用这种擦除模式。
程序动画应用程序动画应用附录(1) 附录? ? ? ? ? ? ? ? ? %初始化一个电影矩阵M=moviein(16); %创建电影for k=1:16 plot(fft(eye(k+16))) axis equal M(k)=getframe;%调用getframe函数生成每个帧end %运用for-end循环语句,循环次数为16 movie(M,30) %调用movie函数将电影动画矩阵M(k)播放30次附录(2) 附录? %将前面创建的电影动画中添加一个垂直的滚动条? >> h=uicontrol('style','slider','position',[10 50 20 100],'Min',1,'Max',16,'Value',1) ? >> for k=1:16 ? plot(fft(eye(k+16))) ? axis equal ? set(h,'Value',k) ? M(k)=getframe(gcf) %gcf为返回当前图形窗口句柄? end ? >> clf ? >> axes('Position',[0 0 1 1]) ? >> movie(M,30)附录(3) 附录? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %初始化一个电影矩阵M=moviein(16); %创建电影for k=1:16 plot(fft(eye(k+16))) axis equal M(k)=getframe;%调用getframe函数生成每个帧end %运用for-end循环语句,循环次数为16 movie(M,30) %调用movie函数将电影动画矩阵M(k)播放30次>> %将前面创建的电影动画中添加一个垂直的滚动条h=uicontrol('style','slider','position',[10 50 20 100],'Min',1,'Max',16,'Value',1) for k=1:16 plot(fft(eye(k+16))) axis equal set(h,'Value',k) M(k)=getframe(gcf) %gcf为返回当前图形窗口句柄end clf %清除当前图形axes('Position',[0 0 1 1]) movie(M,30) 附录(4) 附录? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A=[-8/3 0 0;0 -10 10;0 28 -1]; y=[35 -10 -7]'; h=0.01; p=plot3(y(1),y(2),y(3),'.','EraseMode','none',... 'MarkerSize',5);%set EraseMode to none axis([0 50 -25 25 -25 25]) hold on for i=1:4000 A(1,3)=y(2); A(3,1)=-y(2); ydot=A*y; y=y+h*ydot; %更改坐标值set(p,'XData',y(1),'YData',y(2),'ZData',y(3)) drawnow i=i+1; end。
matlab动画制作

�
x 5
h = plot(x, sin(x).*exp(-x/5), 'EraseMode', 'xor');
%设定图轴的范围 %画出网格线
for i = 1:5000
y = sin(x+i/50).*exp(-x/5); set(h, 'ydata', y);
end
drawnow
%立即作图
%设定新的y坐标
movie(M, 3);
fprintf('播放电影中...\n');
end
M(i) = getframe;
view([-37.5+i*360/n, 30]);
%抓取画面,并存入电影资料矩阵M
%改变观测角度
%播放电影三次
M A T L A B程式設計入門篇:動畫製作
电影动画之范例一
�
最后一个frame的画面
M A T L A B程式設計入門篇:動畫製作
�
若您有安装Simulink,可试试下列动态系统仿 真加上动画呈现:
� � � �
对象动画之范例:Simulink
� �
onecart:传统的弹簧加上砝码的动态系统。 dblcart1:一条弹簧加上两个砝码的动态系统。 simppend:简单的单摆系统。 dblpend1:两截的摆动系统。 dblpend2:更复杂的摆动系统。 penddemo:倒单摆系统。
M A T L A B程式設計入門篇:動畫製作
MATLAB程序设计入门篇 动画制作
M A T L A B程式設計入門篇:動畫製作
�
MATLAB产生动画的方式有两种:
�
电影方式:
MATLAB图形及三维动画仿真设计

[X,Y]=meshgrid(x,y);
p=sqrt(4-X.^2/9-Y.^2/4);
subplot(3,2,1);mesh(p); %有网格 格子图,色调方向:有上
subplot(3,2,2);surf(p); %默认的方向:色调方向:有上到
subplot(3,2,3);surfc(p); %带等高线;色调方向:有上到下
axis([0 6 8 18])
z=f(x,y) — 根据x,y坐标找出z的高度 例:绘制z=x2+y2的三维网线图形
>>x=-5:5; y=x; >>[X,Y]=meshgrid(x,y); >>Z=X.^2+Y.^2 ; >>mesh(X,Y,Z)
(五)三维曲面图
■ surf —— 三维曲面绘图函数,与网格图看起来一样 与三维网线图的区别: 网线图:线条有颜色,内部是黑色的(无颜色) 曲面图:线条是黑色的,内部有颜色(把线条之间的空
■
■
■ fill3(x,y,z,"w"); ■ hold on; ■ plot3(x,y,z,"ro") ■ grid on ■ xlabel("x轴"),ylabel("y轴"),zlabel("z轴") ■ axis([0 10 0 10 0 10])
(四)三维网格图
所谓网格图,是指把相邻的数据点连接起来形成的网状曲 面。利用在X-Y平面的矩形网格点上的Z轴坐标值,Matlab 定义了一个网格曲面。三维网格图的形成原理为:在X-Y平 面上指定一个长方形区域,采用与坐标轴平行的直线将其分 格;计算矩形网格点上的函数值,即Z轴的值,得到三维空 间的数据点;将这些数据点分别用处于X-Z或者平行面内的 曲线和处于Y-Z或者平行面的曲面连接起来,即形成网格图。 网格图对于显示大型的数值矩阵很有用处。
MATLAB教程 第14章简单动画制作

© 2007
第14章 14章
简单动画制作
交互按钮 创建文字按钮
(4)分别单击“指针经过”帧和“按下”帧,按F6键,复制“弹起”帧中的 内容。 (5)单击“指针经过”帧,利用工具箱中的“箭头”工具选定文本,然后将 文本颜色改为黑色,如图所示。
14.29
© 2007
第14章 14章
简单动画制作
交互按钮 创建文字按钮
14.9
© 2007
第14章 14章
简单动画制作
关于帧
(11)在“图层2”时间轴的第1帧上右击,从弹出的快捷菜单中选 择“创建补间动画”命令,再在第20帧上右击,从弹出的快捷菜 单中选择“创建补间动画”命令,这样即可创建从第1帧到第20帧 的动画。 (12)用同样的方法制作第20帧到第40帧之间的动画。
14.18
© 2007
第14章 14章
简单动画制作
运动补间动画 创建运动补间动画
(4)单击动画的最后一帧,并把场景中的对象移动到动画的目标位置,这时 动画的最后一帧将自动成为关键帧,在时间轴的帧区域将显示为箭头,如图 所示。
14.19
© 2007
第14章 14章
简单动画制作
运动补间动画 创建运动补间动画
第14章 14章
简单动画制作
创建逐帧动画实例
(4)单击第2帧,然后选择“插入”→“时间轴”→“关键帧” 命令,插入一个关键帧,在舞台中输入4。 (5)重复上一步,创建数字3、2、1和文字GO。 (6)选择“控制”→“测试影片”命令,测试制作的电影,如图 所示为电影中的一帧 。
(7)选择“文件”→“保存”命令,保存文件;或选择“文 件”→“导出影片”命令,导出影片。
14.8
© 2007
MATLAB中的三维图形绘制与动画制作技巧

MATLAB中的三维图形绘制与动画制作技巧引言MATLAB是一种强大的科学计算软件,广泛应用于工程、物理、数学等各个领域。
其中,三维图形绘制和动画制作是其功能的重要一部分。
本文将深入探讨MATLAB中三维图形绘制与动画制作的技巧,并给出一些实用的示例。
一、三维图形绘制1. 坐标系的设定在绘制三维图形之前,我们需要设定坐标系。
通过使用MATLAB的figure函数和axes函数,我们可以创建一个三维坐标系,并设置其属性,如坐标轴的范围、标签等。
2. 点的绘制在三维图形中,最基本的图元是点。
通过scatter3函数,我们可以绘制出一系列点的三维分布情况。
可以通过设置点的大小、颜色、透明度等属性,增加图像的美观性。
3. 曲线的绘制MATLAB提供了多种绘制曲线的函数,如plot3、line、quiver等。
通过这些函数,我们可以绘制各种样式的曲线,例如直线、曲线、矢量、流线等。
我们可以根据需要设置线条的样式、颜色、宽度等属性。
4. 曲面的绘制除了曲线,我们还可以绘制三维曲面。
通过函数mesh、surf和contour,我们可以绘制出具有平滑外形的曲面。
可以通过设置颜色映射和透明度等属性,使得曲面具有更加细腻的外观。
二、动画制作1. 创建动画对象要制作动画,我们需要先创建一个动画对象。
通过使用MATLAB的videoWriter函数,我们可以创建一个视频文件,并设置其参数,如帧率、分辨率等。
2. 绘制关键帧动画的核心是绘制一系列关键帧,并在每一帧之间进行插值。
通过在每一帧中修改图形对象的属性,我们可以实现对象的平移、旋转和缩放等变换。
通过MATLAB提供的getframe函数,我们可以将当前图像存储为一个帧对象。
3. 帧之间的插值在关键帧之间,我们需要进行插值,以平滑动画的过渡。
通过使用MATLAB 的linspace函数,我们可以生成两个关键帧之间的若干插值。
然后,我们可以在每个插值处更新图形对象的属性,从而实现动画效果。
MATLAB中的动画设计

1
质点动画
2
电影动画
3
擦除动画
MATLAB中的动画设计——质点动画
1、质点动画
• 产生一个顺着曲线轨迹运动的质点来操作 • 使用comet、comet3函数 • 最简单的动画产生方式
MATLAB中的动画设计——质点动画
设计步骤 • step1:求解出质点完整的运动轨迹坐标x,y和z • step2:使用comet或者comet3直接绘制动点
当创建了一系列动画帧后,可利用movie函数播放这些动画帧。该函数的主要格式有: (1)movie(M),将矩阵M中的动画帧播放一次 (2)movie(M,n),将矩阵M中的动画帧播放n次 (3)movie(M,n,fps),将矩阵M中的动画帧以每秒fps帧的速度播放n次
MATLAB中的动画设计——电影动画
• 最常用的动画设计方式。
Matlab的图形绘制函数允许采用不同的擦除模式来擦除原来的对象,不同的擦除模式 将产生不同的动画效果。擦除模式是通过没置“EraseMode”属性来完成的,一共有 三种擦除模式: (1)none:重新绘制图形对象时不擦除原来的对象,这种模式可动态演示图形的生 成过程,如曲线和旋转曲线的生成过程。 (2)background:在重新绘制图形对象之前。用背景色重绘对象来达到擦除原来图 形对象的目的。该模式会擦除任何对象和它下面的任何图形。 (3)Xor:在重新绘制图形对象之前,只擦除原来的对象,不会擦除其他对象或图形。 这种模式能产生图形对象移动的效果。
MATLAB中的动画设计——质点动画
【例3】平抛运动
%平抛运动 clear vx = 40; t = 0:0.01:10; x = vx*t; y = -9.8*t.^2/2; comet(x,y)
Matlab-制作动画

• mesh:绘制网面图
4
函数及功能
• imwrite():将数据转换成图像文件 • surf:画立体曲面图 • peaks:生成一个凹凸有致的曲面 • figure:创建一个数字图形图像
• aviobj = avifile(filename,'PropertyName',value,...)
– AVIFILE returns a handle to an AVI file object, aviobj.
• for kk=1:10:K
• imagesc(data(:,:,kk));
• set(gca,'clim',[-1 1]);
• colormap(hsv(128))
• frame = getframe(gca);
• aviobj = addframe(aviobj,frame);
• end
• aviobj = close(aviobj);
– x=[0:0.5:360]*pi/180;plot(x,sin(x),x,cos(x))
• 二维动画
x = -pi:pi/30:pi; h=
plot(x,cos(x),'o','MarkerEdgeColor','k','MarkerFaceColor','r','MarkerSize', 8,'EraseMode','Xor') for j = 1:3000
%如果要制作彩色的图像,你只能把生成的彩色 图像单独制作(使用其他软件)
nn1=nn.cdata;
nn1=rgb2gray(nn1);
MATLAB入门之动画制作

MATLAB 程式設計入門篇:動畫製作
電影動畫之範例一
在下例中,我們將以不同的角度來顯示 peaks 函 數,並將其結果以電影的方式來呈現動畫。 範例6-1: movie01.m
clear M n = 50; peaks; fprintf('抓取畫面中...\n'); for i = 1:n view([-37.5+i*360/n, 30]); M(i) = getframe; end fprintf('播放電影中...\n'); movie(M, 3); % 播放電影三次 % 改變觀測角度 % 抓取畫面,並存入電影資料矩陣 M % 清除電影資料矩陣 M % 抓取 50 個畫面
MATLAB 程式設計入門篇:動畫製作
電影動畫之範例二
最後一個 frame 的畫面
MATLAB 程式設計入門篇:動畫製作
電影動畫之範例三
改變影像的色盤矩陣,讓影像出現「從正片變到 負片」的效果 範例6-3: movie03.m
clear M load clown.mat image(X); colormap(map); n = 30; scale = cos(linspace(0, 2*pi, n)); fprintf('抓取畫面中...\n'); for i = 1:n colormap(((i-1)*(1-map)+(n-i)*map)/n); M(i) = getframe; end fprintf('播放電影中...\n'); movie(M, -5); % 播放電影 5 次(含正向與逆向播放) % 改變色盤矩陣 % 畫出小丑臉 % 抓取 30 個畫面 % 清除電影資料矩陣 M
物件方式:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB中的动画设计——擦除动画
3、擦除动画
• 使用Matlab的绘图函数不断重复绘制图形对象,重绘过程中递增式地改 变图形对象位置将产生动画效果。 • 使用drawnow命令;设置擦除模式(EraseMode)。 • 最常用的动画设计方式。
Matlab的图形绘制函数允许采用不同的擦除模式来擦除原来的对象,不同的擦除模式 将产生不同的动画效果。擦除模式是通过没置“EraseMode”属性来完成的,一共有 三种擦除模式: (1)none:重新绘制图形对象时不擦除原来的对象,这种模式可动态演示图形的生 成过程,如曲线和旋转曲线的生成过程。 (2)background:在重新绘制图形对象之前。用背景色重绘对象来达到擦除原来图 形对象的目的。该模式会擦除任何对象和它下面的任何图形。 (3)Xor:在重新绘制图形对象之前,只擦除原来的对象,不会擦除其他对象或图形。 这种模式能产生图形对象移动的效果。
设计步骤
• step1:调用getframe函数生成每个帧。该函数返回一个列矢量, 利用这个矢量,就可以创建一个电影动画矩阵。 • step2:调用movie函数按照指定的速度和次数运行该电影动画。 • step3:调用movie2avi函数可以将矩阵中的一系列动画帧转换 成avi视频文件。这样,即使脱离了matlab环境也可播放动画。
MATLAB中的动画设计——电影动画
2、电影动画
• 从不同的视角拍下一系列对象的图形,并保存到变量中,然 后按照一定的顺序像电影一样播放。 • 使用getframe、movie函数。
getframe函数可以捕捉动画帧,并保存到矩阵中。该函数的主要格式有: (1)F=gefframe,从当前图形框中得到动画帧 (2)F=gefframe(h),从图形句柄h中得到动画帧 (3)F=getframe(h,rect),从图形句柄h的指定区域rec中得到动画帧
程序结构
MATLAB中的动画设计——电影动画
【例5】绕Z轴旋转的peak动画
%绕Z轴旋转的Peak动画 [X,Y,Z]=peaks(30); surf(X,Y,Z); set(gca,'visible','off'); colormap(hot) shading interp %记录电影 for i=1:15 view(-45+15*(i-1),30) %视角的改变 m(:,i)=getframe;%抓取画面值 end movie(m)%播放画面
MATLAB中的动画设计——质点动画
【例3】平抛运动
%平抛运动 clear vx = 40; t = 0:0.01:10; x = vx*t; y = -9.8*t.^2/2; comet(x,y)
MATLAB中的动画设计——质点动画
【例4】导弹发射
%导弹发射 vx = 100*cos(1/4*pi); vy = 100*sin(vy*t-9.8*t.^2/2; comet(x,y)
MATLAB中的动画设计——质点动画
【例2】质点绕螺旋轨迹运动
%使用函数comet3建立质点绕圆运动的动画 clear t=0:pi/500:10*pi; plot3(sin(t),cos(t),t) axis square; %hold on; comet3(sin(t),cos(t),t,0.5)
MATLAB中的动画设计——擦除动画
设计步骤
• step1:设置重绘对象的擦除模式'EraseMode'模式 • step2:在循环语句中使用set更改图形的xdata,ydata和zdata等坐 标数据。 • step3:使用darwnow命令刷新屏幕
程序结构
set(h,'erasemode',erasemode)%h是需要执行动画图像的句柄,一般 都是由line或者plot创建 for i=1:n set(h,'xdata',xdata,'ydta',ydata)%更新图像的坐标数据 drownnow%刷新屏幕 end
当创建了一系列动画帧后,可利用movie函数播放这些动画帧。该函数的主要格式有: (1)movie(M),将矩阵M中的动画帧播放一次 (2)movie(M,n),将矩阵M中的动画帧播放n次 (3)movie(M,n,fps),将矩阵M中的动画帧以每秒fps帧的速度播放n次
MATLAB中的动画设计——电影动画
MATLAB中的动画设计——质点动画
【例1】质点绕圆轨迹运动
%使用函数comet建立质点绕圆运动的动画 clear t=linspace(0,2*pi,10000); x=cos(t); y=sin(t); plot(x,y);%以便比较comet是否跟着轨迹走 axis square; hold on; comet(x,y,0.03)
MATLAB中的动画设计——擦除动画
【 例 7 9 】 运 动 的 小 球 【 例 8 】 单 摆 横 梁
【 例 】 时 钟 演 示
【 例 10 】 小 球 绕 跑 道 运 动
Thanks!
MATLAB中的动画设计——擦除动画
【例6】随时间衰减的正弦函数
%随时间衰减的正弦函数 t=0:0.005:10*pi; %产生曲线并用xor方式抹去旧曲线 h=plot(t,sin(2*t).*exp(-t/5),'EraseMode','xor'); set(gcf,'Position',[450,350,350,250]) for i=1:200 y=sin(2*t+i/10).*exp(-t/5); set(h,'ydata',y);%不断更新y值 drawnow; end
MATLAB中的动画设计
同济大学
MATLAB中的动画设计
1 2
3
质点动画 电影动画 擦除动画
MATLAB中的动画设计——质点动画
1、质点动画
• 产生一个顺着曲线轨迹运动的质点来操作 • 使用comet、comet3函数 • 最简单的动画产生方式
MATLAB中的动画设计——质点动画
设计步骤
• step1:求解出质点完整的运动轨迹坐标x,y和z • step2:使用comet或者comet3直接绘制动点