MATLAB 图形和动画编程
- 格式:doc
- 大小:77.00 KB
- 文档页数:7
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。
动画制作动画制作通常有两种方法:一种是预先将图形制作好,并放到图形缓冲区内,然后一帧一帧地播放。
另一种方法是保持整个背景图案不变,只更新运动部分的图案,以便加快每幅图的实时生成速度。
1.简单动画制作在getframe命令下,可以完成动态数据到动态画面的制作。
其使用格式及制作步骤一般为:for j=1:nplot_commandM(j) = getframe;endmovie(M,n)其中M(j)=getframe将当前图形窗口中的画面作为第j帧存入矩阵M,movie(M,n)将按顺序放映矩阵M中存储的画面,并重复n次。
例x=-3:0.1:3;[x,y]=meshgrid(x);z=sin(x.*y).*exp(x.*y/5);for j=1:30mesh(cos(4*pi*j/30)*z,z)m(j)=getframeendmovie(m,10)例模拟6个移动物体x0=[150 85 150 145 130 0];y0=[140 85 155 50 150 0];q=[243/180*pi 236/180*pi 220.5/180*pi 159/180*pi 230/180*pi 52/180*pi]';t=0:0.05:2*pi;for i=0:280pause(0.01);for j=1:5axis([0 160 0 160]);fill(x0(j)+0.8*i*cos(q(j))+4*cos(t),y0(j)+0.8*i*sin(q(j))+4*sin(t),'b')hold on;endfill(x0(6)+0.8*i*cos(q(6))+4*cos(t),y0(6)+0.8*i*sin(q(6))+4*sin(t),'r')hold off;end2.其它例子在Matlab里利用图形的“EraseMode”属性可以实现显示新对象,擦除旧对象,而又不破坏背景图案。
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动画制作例子
在MATLAB中,你可以使用`pause`和`drawnow`命令来制作动画。
以下是一个简单的例子,它展示了如何创建一个动画,该动画显示一个点在二维平面上沿一圆形路径移动。
```matlab
% 初始化参数
t = 0::2pi; % 时间向量
x = sin(t); % x坐标
y = cos(t); % y坐标
% 创建图形窗口
figure;
% 循环动画
for k = 1:length(t)
% 绘制当前点的位置
plot(x(k), y(k), 'ro');
% 添加标题和标签
title('点在圆上的移动');
xlabel('x');
ylabel('y');
% 暂停并更新图形,以便可以看到动画效果
pause();
drawnow;
end
```
这个脚本将会创建一个动画,显示一个点在二维平面上沿着一个圆形路径移动。
这个动画是通过在一个循环中绘制每个点的位置并暂停一段时间来创建的。
`drawnow`命令将立即更新图形窗口,使得你可以看到动画效果。
注意:MATLAB的版本和环境可能会影响动画的表现。
在一些环境中,可能需要使用不同的命令或参数才能获得最佳的动画效果。
MATLAB 学习笔记图形与动画编程(一)GUI——Graphical User Interfaces 图形用户界面实现一个GUI的过程包括两个基本任务:一个是GUI的组建布局;一个是GUI组件编程。
在matlab中,GUIDE是一个组建布局工具箱,能够生成用户所需要的组件资源和并保存在一个FIG文件中。
可以这样说,matlab图形界面程序的核心就是句柄图形的应用。
句柄图形是一组底层图形函数的名称,这些函数用来在matlab中生成图形,他提供了对图形的高级控制,其基本思想是,matlab 中每一个可是部分就是一个对象,每个对象都有一个相应的唯一标示符,即句柄。
MATLAB的二维制图二维图形的基本绘图命令Matlab提供了两种级别的二维图形基本绘图命令:高级绘图命令plot;低级绘图命令line;plot函数常见语法格式:1.plot(Y)2.plot(X,Y)3.plot(X1,Y1,X2,Y2,...Xn,Yn)上述命令可以指定线型、颜色、数据点标记类型等属性需要注意的是,当指定了数据点标记类型,但不指定线型的时候,则表示只标记数据点,而不进行连线绘图。
line函数常见语法格式:line(X,Y)将各数据点用线段顺次连接起来,从而绘制一条折线line(X,Y)中的X,Y可以是一组相关的变量,这样就画出一条折线,如果是不变的点,则line 函数画出的是直线如:%plot line 应用x=0:pi/20:2*pi;y1=sin(x);y2=sin(x+pi/2);plot(x,y1,'r:',x,y2,'+')line([0,7],[0.5,0.5])line([0,7],[-0.5,-0.5])legend('y1','y2')xlabel('x')ylabel('y')二维图形的修改坐标轴的调整:axis函数1.调整坐标轴的范围axis([xmin xmax ymin ymax])2.调整坐标轴的状态axis(str)此函数的功能是将坐标轴的状态设定为字符串参数str所指定的状态。
参数str是由一对单引号所引起来的字符串(也可以省略这对单引号),它表明了将坐标轴调整为哪一种状态。
常用的字符串命令有:axis xy 使用笛卡尔坐标系axis ij 使用matrix坐标系axis square 将当前图形设置为正方形图形axis eaual 将x,y坐标轴的单位刻度设为相等axis normal 关闭Axis square和Axis eaual命令axis off/on 关闭/打开网格线3.保存坐标轴的范围variable=axis 变量variable保存一个向量值,这个向量能够以axis的形式应用于设定坐标轴的范围大小4.保存坐标轴的状态[s1,s2,s3]=axis(‘state’)S1:是否自动设定坐标轴的范围S2:是否关闭坐标轴S3:所使用的坐标轴种类添加或取消网格线:grid ongrid off坐标轴的名称:xlabelylabel图形标题:title文字在图形中的显示:1.用坐标轴确定文字位置text(x,y,string,option)option为坐标单位决定参数,如果不给出该选项参数,则(x,y)坐标的单位和图中的单位一致,如果该参数取为‘sc’则表示规范化窗口的相对坐标,其变化范围为0~1,即窗口的左下角为(0,0),右上角为(1,1)2.用鼠标确定文字位置gtext是交互式文本框标注函数》gtext(‘string’)可以在鼠标单击的为位置标注一个单行文本框》gtext({‘string1’,‘string2’,...})可以在鼠标单击的位置标注一个多行文本框》gtext({‘string1’;‘string2’;...})可以通过多次鼠标单击标注多个文本框图形的图例和颜色条:》legend(‘string1’,’string2’,...)添加图例,并设置各组数据的图例文字为对应位置string的字符串》legend(‘off’) 清除图例》legend(‘hide’) 隐藏图例》legend(‘show’) 显示图例》colorbar 添加颜色条函数绘图:自适应采样绘图函数》fplot(fname,lims,tol,选项)其中,fname是函数名,以字符串形式出现;lims是x,y的取值范围;tol是相对允许误差,系统默认值为2e-3;选型定义与plot函数相同。
隐函数绘图:对于f=f(x) :》ezplot(f) 默认区间-2*pi~2*pi》ezplot(f,[a,b])对于f=f(x,y) :》ezplot(f)》ezplot(f,[xmin,xmax,ymin,ymax])对于参数方程x=x(t)和y=y(t) :》ezplot(x,y)》ezplot(x,y,[tmin,tmax])双Y轴绘图应用》plotyy(X1,Y1,X2,Y2)绘制Y1对应于X1并具有Y轴标识在左边的图形与绘制Y2对应于X2并具有Y轴标识在右边的图形》plotyy(X1,Y1,X2,Y2,fun)其中fun为matlab中的绘图函数,用户必须使用@或单引号去指定每个绘图方式》[AX,H1,H2]=plotyy(...)返回建立于AX的两个坐标轴的句柄值和两条曲线的句柄值H1和H2。
其中AX(1)是左方的坐标轴,AX(2)是右方的坐标轴,因此通过这两个值就可以设置滚动条等操作填充图形的绘制》fill(X1,Y1)根据X1和Y1的元素绘制图案填充图,X1和Y1必须长度相同多坐标系绘图与图形窗口分割图形的叠印:单独使用hold可以切换当前绘图叠加模式,将当前绘图窗口的叠加模式从on改为off或者从off改为on;hold on 和hold off 分别明确指定当前绘图窗口叠加绘图模式的开关状态。
子图的绘制:在一个图形窗口中绘制多幅图的另一种方法是利用子图绘制函数subplot将当前窗口分割成几个区域,然后再在各个区域中分别绘图。
》subplot(m,n,i)函数表示在当前绘图区中建立m行n列个绘图子区,在编号为i的位置上建立坐标系,并设置该位置为当前绘图区。
DATA CURSOR 工具在matlab中,用户可以通过绘图工具栏中DATA CURSOR工具来任意查询图面绘图数据。
可以建立和删除多个显示方块,也可以将方块中的数据导入到matlab工作区间。
绘制极坐标图形Matlab提供了基本的极坐标绘图函数polar》polar(theta,rho)》polar(theta,rho,LineSpec)其中,theta表示各数据点的角度向量;rho表示各数据点的幅值向量,需要注意的是theta和rho 的长度必须一直;LineSpec是一个选项参数,其含义与plot选项参数的含义相同。
极坐标绘图函数类似于plot,需要注意的是theta和rho也可以是普通的二维数组,但polar不能接受多对参数输入。
特殊二维图形的绘制阶梯曲线:》stairs(x,y)其中,x 和y 为相同大小的向量或相同大小的矩阵。
X可以是行向量或列向量,y是一个有length(x)行的矩阵。
区域图:区域图将向量或矩阵中的元素显示为一条或多条曲线,并填充每条曲线下面的面积,当为矩阵时,曲线堆栈显示,它的调用格式如下:》area(y)如果y为向量,则根据它的值绘图;如果y为矩阵,则根据它的每一列值绘图》area(x,y)x、y为向量时,同plot(x,y),绘图区域以面进行填充;当y为矩阵时,以y矩阵每一列元素之和所得向量绘制区域图概率分布图:概率分布图用来显示已知数据集的分布情况,已知数据集的数据范围被分割成若干个区间,图中用各个柱条代表处于该区间的数据点数目》hist(y)将向量Y的最大值和最小值的差平均分成10等分,然后绘出其分布图》hist(Y,n)将向量Y的最大值和最小值的差平均分成n等分,然后绘出其分布图》hist(Y,X)以向量X的各个元素值为统计范围,绘出Y的分布图极坐标下的直方图也成玫瑰图,绘制函数rose,调用格式如下:》rose(thera)将向量theta的最大值和最小值平均分成20等分,然后绘制其分布图》rose(thera,n)将向量theta的最大值和最小值平均分成n等分,然后绘制其分布图》rose(thera,x)以向量x的各个元素值为统计范围,绘制thera分布图离散点图:》scatter(A,B,s,c)在向量A和B指定的位置显示彩色圆圈,A和B必须是长度相同的向量,s确定标记的大小,c 确定标记的颜色,s和c可以使标量,也可以是和A,B长度相同的向量。
散点矩阵图:》plotmatrix(z)根据z的元素绘制散点矩阵图,z可以是向量或者矩阵。
离散数据绘图:显示离散数据的变化趋势,还可以用火柴杆图stem》stem(Y)以x=1,2,3...为各数据点的x坐标,以Y向量的各个对应元素为y坐标,在(x,y)坐标点画出一个空心的小圆圈,并连接一条线段至x坐标轴》stem(X,Y)以向量x的各个元素为x坐标,以Y向量的各个对应元素为y坐标,在(x,y)坐标点画出一个空心的小圆圈,并连接一条线段至x坐标轴》stem(X,Y , ‘fill’)以向量x的各个元素为x坐标,以Y向量的各个对应元素为y坐标,在(x,y)坐标点画出一个实心的小圆圈,并连接一条线段至x坐标轴伪彩色图:伪彩色图常用于以二维平面图表现三维图形的效果,用颜色表示三维图形的高度》pcolor(z)绘制z数据所对应的伪彩色图误差条图:》errorbar(x,y,e)该函数根据x绘制y的误差条图,误差条的长度为2*e(i),x、y和e必须大小相同向量图:Matlab中常用的向量图包括罗盘图、羽毛图和向量场图其中,compass函数可以绘制罗盘图,compass接受直角坐标参数,在绘制出的罗盘图中,每一个数据点被表示为极坐标下一条从原点出发的带箭头的线段。
》compass(U,V)表示向量起点在原点,向量数目为n,n为U或V中的元素数目,向量终点位置有U(i)或V (i)决定》compass(Z)Z表示复数矩阵,向量个数为矩阵元素数,向量终点位置由复数矩阵Z元素决定》compass(... , LineSpec)表示向量图设置线的类型、标注及颜色等属性函数feather用来绘制羽毛图。
Feather也接受直角坐标参数,与罗盘图不同的是,羽毛图实在直角坐标系下绘制的,每一个数据点被表示为带箭头的限度,不过其起点是在x轴上间隔单位长度的刻度点。
调用格式类似compass向量场图的绘制函数是quiver,调用个数为quiver(x,y,u,v),表示以(x,y)为起点,用箭头表示(u,v)代表的向量。