《【精品】MATLAB8.X程序设计及典型应用第六章 数据和函数的可视化精品ppt课件.ppt》由会员分享,可在线阅读,更多相关《【精品】MATLAB8.X程序设计及典型应用第六章 数据和函数的可视化精品ppt课件.ppt(98页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、MATLAB8.X程序设计及典型应用第六章 数据和函数的可视化第六章 数据和函数的可视化MATLAB能够为广大科技工作中接受和喜爱的原因,除了其强大的计算功能外,就是它能够提供极其方便的绘图功能。MATLAB的数据函数可视化可以方便地让用户从一堆杂乱无章的数据中观察数据间的内在关系,并进而获得数据背后隐藏的物理本质。MATLAB可以绘制多种类型的二维、三维图形,并可以进行动画演示。本章将介绍MATLAB的二维和三维绘图指令。重点介绍几个重要指令函数plot()、mesh()、surf()的应用。并介绍图形的辅助处理函数。不同坐标系中二维和三维曲线的绘制直角坐标系和极坐标系之间的相互转换绘制三维
2、网线图和网面图并实现图形的裁切和镂空利用图形句柄实现图形的精细操作利用图形窗现场菜单实现图形的修饰简易绘图指令的应用本章的主要内容有:6.1二维曲线的绘制MATLAB绘制二维曲线,即绘制平面曲线,与手工绘制曲线的思路相同,首先必须确定平面坐标系。MATLAB提供了不同坐标系下的绘图指令,其中包括直角坐标系、极坐标系、对数坐标系等。其次,在对应坐标系中描出一组坐标点,即在坐标系中实现离散数据的可视化。最后,采用插值方法计算离散数据点之间的值并将其连接成线,从而近似表现函数的可视化。对此必须要注意一点就是采样点必须足够多,才能够比较真实地体现原函数隐藏的规律。6.1.1 二维直角坐标系中基本绘图指
3、令plot()1绘图指令plot()在绘图曲线时,最重要的指令是plot()。指令plot()在执行时将打开一个默认图形窗,描点连线在这个窗口里面自动完成。另外,它还会自动添加数据标尺到坐标轴上。如果图形窗已经存在,该指令将刷新当前窗口中的图形。指令plot()有3种调用格式:(1).plot(y,s)当y 是向量时,元素的下标作为横坐标,y作为纵坐标,绘制一条曲线。当y是矩阵时,以该矩阵的“行下标”为横坐标,y为纵坐标绘制“列数”条曲线。s是所绘曲线的线型、点型和颜色的字符串,含义如表6-1所示。当s缺省时,MATLAB将以默认设置蓝色细实线(b-)来绘制曲线。s选择表6-2里面的字符,MA
4、TLAB绘制出离散的图形。【例6.1】指令plot()使用实例之一:绘制连续波形的叠加波。编写文件名为exm6_1的脚本文件:clear,clcx1=linspace(0,4,10);y1=sin(x1)+sin(8*x1);x2=linspace(0,4,100);y2=sin(x2)+sin(8*x2);subplot(2,2,1),plot(x1,y1,r.),title(a)subplot(2,2,2),plot(x2,y2,r.),title(b)subplot(2,2,3),plot(x1,y1,x1,y1,r.),title(c)subplot(2,2,4),plot(x2,y2
5、),title(d)图 6.1 指令plot()绘制的离散图形和连续图形在指令窗中执行文件exm6_1.m,结果如图6.1所示。【例6.1】指令plot()使用实例之一:绘制连续波形的叠加波。【说明】对于同一个函数显示的图形,用户如果选择的数据点数较少,则图形(如图(a)或(c))不能较好地反映函数的特性。用户将数据点作为输入宗量传递给函数plot()时,如果不特别说明绘制离散图形,MATLAB将自动利用线性插值的方法用直线连接相邻的数据点,将各离散点连接成曲线(如图(c)和(d))。【例6-2】指令plot()使用实例之二:绘制曲线 ,其中 ,.编写文件名为exm6_2的脚本文件:Clear
6、,t=linspace(0,2*pi,30);%创建301的列向量k=linspace(0.2,0.8,7);%创建17的行向量y=cos(t)*k;%产生307的矩阵plot(y)在指令窗中执行文件exm6_2.m,结果如图6.2所示。【说明】:当指令plot()同时绘制多条曲线时,MATLAB默认的着色次序为蓝、绿、红、青、紫红、黄和黑,便于用户观察.(2)plot(x,y,s)当x和y为长度相同的向量时,则绘制由它们组成的采样点的一条曲线,其中x为横坐标,y为纵坐标。当x是向量,y是矩阵时,则绘制出“列数条”不同颜色的曲线。当x、y是同维矩阵时,则以x、y对应列元素为横纵坐标分别绘制曲线
7、。曲线条数等于y矩阵的列数。该指令的输入宗量(x,y,s)称为二维绘图的三元组。读者可以将脚本文件exm6_1中的指令plot(y)修改为plot(t,y)并观察绘图结果。(3)plot(x1,y1,s1,x2,y2,s2,xn,yn,sn)同时绘制n条曲线,每条曲线的绘制都由“三元组”(xi,yi,si)给出,且每个“三元组”之间彼此独立。6.1.1 二维直角坐标系中基本绘图指令plot()【例6-3】指令plot()执行三元组实例:绘制曲线 其中编写文件名为exm6_3的脚本文件:clear%绘制一条曲线x=linspace(0,6,20);y=x.2.*sin(x);figure(1)p
8、lot(x,y)%绘制多条曲线figure(2)y1=y+2;y2=y-2;plot(x,y,x,y1,k-.*,x,y2,:x)在指令窗中执行文件exm6_3.m,结果如图.【说明】字符串k-.*表示用黑色点划线绘制曲线,且曲线上的每一个离散数据点用“八线符”标记显示。为了避免曲线图形被刷新,可以执行指令figure()同时打开多个图形窗口。figure(n)表示打开第n个图形窗。如果用户不设置图形窗,MATLAB遇到绘图指令时自动打开名为Figure1的图形窗。【例6-3】指令plot()执行三元组实例:绘制曲线 其中MATLAB除了允许用户用相同标度在同一坐标系内绘制多条曲线外,用户运行
9、指令plotyy()可以利用不同的标度在同一个坐标内绘制不同曲线,其调用格式为:plotyy(x1,y1,x2,y2)分别以左y轴、右y轴和x轴绘制(x1,y1)和(x2,y2)的曲线。其中x1和y1,x2和y2为对应的向量或矩阵,一般情况下y1和y2的标度采用不同的间隔。2双纵坐标绘图指令plotyy()【例6-4】指令plotyy()绘制曲线实例:在同一个坐标中绘制曲线 和 编写文件名为exm6_4的脚本文件:clear,x=linspace(0,8,100);y1=2*exp(-0.5*x).*sin(2*pi*x);y2=4.5*exp(-0.1*x).*sin(x);plotyy(x
10、,y1,x,y2);在指令窗中执行文件exm6_4.m,结果如图6.4所示。6.1.2 二维极坐标系中基本绘图指令polar()函数polar()实现极坐标绘图,其格式如下:polar(theta,radius,s)在极坐标系中绘图,其中向量theta为极角,单位为弧度;向量r为极径。字符串s的含义与指令plot()中的相同,s缺省时为蓝色细实线b-。【例6-5】指令polar()绘制曲线实例:绘制曲线 编写文件名为exm6_5的脚本文件:clear,th=linspace(0,2*pi,100);r=3*(1+cos(th);polar(th,r,k-*)在指令窗中执行文件exm6_5.m,
11、结果如图6.1.3 直角坐标和极坐标之间的相互转换直角坐标和极坐标之间通过函数文件可以相互转换:直角坐标到极坐标的转换转换函数为cart2pol(),调用格式为:Th,r=cart2pol(x,y)实现直角坐标到极坐标的转换。输入宗量(x,y)为直角坐标系内的坐标,输出宗量(Th,r)为其对应极坐标系内的坐标,其中Th为极坐标系里面的极角,单位为弧度。r为极径。极坐标到直角坐标的转换函数为pol2cart(),调用格式为:x,y=pol2cart(Th,r)实现极坐标到直接坐标的转换。输入宗量(Th,r)为极坐标系内的坐标,输出宗量(x,y)为其对应直角坐标系内的坐标。比如A(2,3)、B(p
12、i/3,2)分别为直角坐标系内和极坐标系内的两点,执行转换函数可以分别获得其对应于极坐标和直角坐标内的坐标:Th,R=cart2pol(2,3)Th=0.9828R=3.6056 x,y=pol2cart(pi/3,2)x=1.0000y=1.73216.1.3 直角坐标和极坐标之间的相互转换6.1.4 二维对数坐标系绘图MATLAB除了能以直角坐标和极坐标绘图,还提供了半对数和全对数坐标系绘图指令semilogx(),semilogy()和loglog()。调用格式分别如下:semilogx(x,y,s)在半对数坐标系中绘图,横轴为以10为底的对数坐标log(x),纵轴为线性坐标y。semi
13、logx(x,y,s)在半对数坐标系中绘图,横轴为线性坐标x,纵轴为以10为底的对数坐标log(y)。loglog(x,y,s)在全对数坐标系中绘图。横轴、纵轴均为以10为底的对数坐标log(x)和log(y)。其中各个指令中的字符串s的含义与指令plot()中的相同。【例6-6】对数坐标系内绘制曲线实例:绘制曲线 编写文件名为exm6_6的脚本文件:clearx=linspace(0,10,100);y=x.3+x.2-2*x+6;figure(1);semilogy(x,y);%y轴用以10为底的对数刻度标定的半对数坐标系绘图grid onfigure(2);loglog(x,y);%全对
14、数坐标系绘图grid on(a)绘制半对数坐标曲线绘制半对数坐标曲线(b)绘制全对数坐标曲线绘制全对数坐标曲线在指令窗中执行文件exm6_6.m,则运行的结果为:用户可以执行指令plot(x,y)、semilogx(x,y)获得直角坐标和x轴半对数图形,并比较运行结果。【例6-6】对数坐标系内绘制曲线实例:绘制曲线 MATLAB的所有图形都显示在特定的窗口中,成为图形窗(figure)。当使用绘图指令时,如果没有已经存在的窗口,MATLAB会自动创建一个新的窗口。如果已经存在图形窗,默认时,MATLAB将直接利用该窗口绘图。如果用户需要同时创建多个窗口绘制不同图例或者在同一个窗口上开辟不同区域
15、绘图等,MATLAB提供了关于窗口的控制和分割的指令:figure(n)。创建第n个图形窗clf 擦除当前图形窗shg 显示当前图形窗close(n)关闭第n个图形窗见【例6-3】和【例6-6】。6.2绘制二维图形的辅助操作6.2.1 窗口的控制与分割图形窗的分割指令为subplot(),调用格式为:subplot(m,n,p)将图形窗分为mn个区域分别绘制图形,其中当前图为第p个区域。各个子图的编号为先上后下,先左后右的顺序。m、n、p之间的逗号可以省略。subplot(position,left botton width height)在规格化的窗口对象(范围为0.0-1.0)里创建一个位
16、置为left botton width height的图形窗。6.2.1 窗口的控制与分割【例6-7】指令subplot()应用实例。编写文件名为exm6_7的脚本文件:clear,subplot(2,3,1:2)%运用分区指令subplot()分区后,合并第1、2子区域t=linspace(0,10,200);y1=sin(2*pi*t);plot(t,y1)subplot(233)%与subplot(2,3,3)等价y2=sin(t);plot(t,y2)subplot(position,0.2,0.05,0.65,0.45)y3=y1.*y2;plot(t,y3,b-,t,y2,r:,t
17、,-y2,r:)【例6-7】指令subplot()应用实例。在指令窗中执行文件exm6_7.m,结果如图【说明】使用指令subplot()分区后,如果希望再恢复到整幅图的界面,用户必须使用clf指令擦除图形。6.2.2 坐标轴的设置MATLAB对图形的控制比较完善。一般情况下,它采用一些列考虑周全的默认设置,能根据所给数据自动地确定坐标取向、范围、刻度、高宽比,并给出令人满意的绘制结果。当然,MATLAB为了适应用户不同的要求,给出了一系列便于操作的指令,方便用户按照自己的需要和喜好修改系统默认的设置参数。用户可用axis()和box()命令对坐标轴重新设定。常用的坐标系统设定指令见表。6.2
18、.2 坐标轴的设置【例6-8】坐标轴设置指令应用实例。编写文件名为exm6_8的脚本文件:%the function about the setting of the axisclear,clf,x=linspace(0,2*pi,30);y=sin(x).*cos(2*x);plot(x,y,r)hold on%在当前图形上继续绘图plot(x,y-1),hold offaxis(0,2*pi,-1.5,1.5)set(gca,xtick,0.1,2.6,5,ytick,-1.5,0,0.2,1)%设定坐标轴的刻度标识axis equal,grid on%添加网格线为了能够清楚看到各个指令在
19、运行过程中的效果,建议用逐步执行的方法,并将图形窗嵌入到desktop界面,效果图如所示。执行结果见图6.8.2所示。【说明】指令set()中的xs,ys分别为横轴和纵轴刻度标识的标识向量,因此取值必须是从小到大的顺序。建议用户调用指令hold on 后在适当位置使用指令hold off,否则绘图时容易出错。6.2.3 图形标识MATLAB允许对图形对象进行文字识别,即图形标识。常用的图形标识指令有:title(s):添加图形标题xlabel(s):横坐标命名ylabel(s):纵坐标命名text(x,y,s):在位置(x,y)处添加说明文字gtext(s):用鼠标在选定位置处添加说明文字其中
20、,s为字符串。可以是英文字符,也可以是希腊文字或者中文,或者特殊字符。指令gtext()执行后,会把当前图形窗从后台调到前台,同时光标变为十字叉。用户移动鼠标,使得十字叉移动到待放置标识位置,单击左键,图形标识便添加到图形窗中。图形标识的希腊字母采用Latex编译方式。有关图形标识常用的希腊字母和其他特殊字符见表。表6-5 图形标识用的希腊字母 表 6-6 图形标识用的其他特殊字符表6-7 上标和下标的控制指令legend(s1,s2,postion)在图形窗中开启一个注释小窗口,依据绘图的先后次序,依次输出字符串对各条曲线进行注释说明。position确定注释窗口的位置,含义如表6-8所示。
21、表6-8 positon参数值6.2.3 图形标识【例6-9】图形标识指令应用实例。编写文件名为exm6_9的脚本文件:clear,clf,t=0:pi/100:2*pi;y1=2*sin(2*t);y2=3*sin(3*t);plot(t,y1,t,y2,-.)%在同一个坐标系分别绘制二条曲线 axis(0,pi,-4,4)title(正弦曲线0rightarrowpi);%给图形加上标题xlabel(时间);%给x轴加标注ylabel(函数值);text(pi/4,2*sin(pi/2),leftarrow这里是pi/4的函数值)gtext(leftarrow这里是3sin(3t)的极小值
22、)%借助鼠标确定位置legend(2sin(2t),3sin(3t),3);%在当前图形上输出图例在指令窗中执行文件exm6_9.m,并借助鼠标,结果如图所示【例6-9】图形标识指令应用实例。6.2.4二维图形辅助操作的现场实现用户通过编写好的M文件,调用一些列指令可以实现对二维图形的辅助操作,同时,MATLAB在图形窗口提供了多种辅助操作的菜单,用户可以借助这些菜单,通过鼠标很轻松地对图形窗中的图形及其坐标轴进行现场操作,方便快捷。MATLAB图形窗带有工具条,在工具条最左边是四个Windows标准按钮。在“Tool”菜单里,列出了可操作选项表6-9 图形窗中Tool菜单里的选项即功能【例6
23、.10】二维图形辅助操作的现场实现。以正弦曲线为例,从坐标轴系统和图形两个方面介绍MATLAB对二维图形辅助操作的现场实现。1,坐标轴系统辅助操作的现场实现运行程序:clear,clfx=linspace(0,2*pi,100);y=sin(x);plot(x,y)绘制出没有任何修饰的曲线。选中editaxes properties,打开图形坐标轴系统的编辑窗口,如图所示.选择X Axis、Y Axis、Font完成对横轴和纵轴的命名,绘图区间的设置,以及坐标轴上字体的设置,点击Ticks实现设定坐标轴的刻度标识。Title处直接输入图题,可以是中文,也可以是特殊字符,无需用单引号。图标给图添
24、加背景色,图标改变坐标轴上的刻度及字体的颜色,如图6.12所示。图图 6.12 坐标轴属性运用效果图坐标轴属性运用效果图【例6.10】二维图形辅助操作的现场实现。用户通过点击图箭头所指按钮,可以打开菜单Inspector:axes,用户可以通过该菜单对轴的更多属性以及有关量值进行查看或者重新设置。(续上图)选中editFigure properties,打开图形的编辑窗口,如图6.13所示。鼠标选中曲线,与曲线辅助操作的菜单便显示在图形窗下侧,通过鼠标操作就可以很容易的修改曲线的线型、线宽以及曲线的颜色.图图 6.13 打开图形属性操作界面打开图形属性操作界面2,图形窗中图形辅助操作的现场实现
25、运用菜单中的Insert选项可以实现更多辅助操作,包括给坐标轴和图形窗命名、添加图例以及给曲线添加标识,灵活方便,如图6.14所示。用户也可以通过点击图6.13箭头所指按钮,可以打开菜单Inspector:graph,用户可以通过该菜单对图形的更多属性以及有关量值进行查看或者重新设置。与运用指令执行的辅助操作相比,鼠标操作灵活方便,但缺点是现场操作产生的图形必须保存,否则图形窗口关闭后,所有鼠标操作过的效果将不复存在。图图 6.14 图形属图形属性运用效果图性运用效果图2,图形窗中图形辅助操作的现场实现6.3 其它二维绘图指令6.3.1简易绘图指令ezplot()和ezpolar()简易绘图指
26、令ezplot()和ezpolar()实现对隐函数的绘图。指令ezplot()实现在直角坐标系内进行简易绘图,通用格式为:ezplot(f,xmin,xmax,ymin,ymax)在区间xxmin,xmax和yimn,ymax上绘制f(x,y)=0的图形。如果输入宗量中没有变量区间,MATLAB将以默认的区间为 绘图。其中函数表达式f可以字符串、内联函数或函数句柄中的任一形式输入。对于参数方程,调用格式为:ezlpot(x,y,tmin,tmax)在区间ttmin,tmax绘制x=x(t)和y=y(t)的图形。如果输入宗量中没有变量区间,MATLAB将以默认的区间 绘图。函数表达式x(t)、y
27、(t)可以字符串、内联函数或函数句柄中的任一形式输入【例6.11】简易绘图指令ezplot()使用实例。编写文件名为exm6_11的脚本文件:clearsubplot(2,2,1);ezplot(x2-y+1);subplot(2,2,2);ezplot(x2-cos(y)+sin(x),-2,1,-15,15);subplot(2,2,3);ezplot(exp(t)*sin(t),exp(t)*cos(t);subplot(2,2,4);ezplot(sin(t),cos(2*t);在指令窗中执行exm6_11.m文件,结果如图所示。说明:指令ezplot()在执行后将自动添加函数关系式作
28、为图题并添加坐标轴名称。调用格式为:ezploar(f,a,b)绘制极坐标曲线rho=f(theta),默认值theta范围0,2。2,简易绘图指令ezpolar()实现在极坐标系中绘制简易图形【例6-12】简易绘图指令ezpolar()使用实例在指令窗中执行语句 ezpolar(abs(2*cos(2*(t-pi/8)执行结果如图所示。6.3.2 特殊二维图形绘制1 直方图直方图的绘图指令为bar()和barh(),调用格式如下:bar(X,Y,WIDTH,参数)对mn矩阵Y绘制含有m组,每组n个宽度为WIDTH的垂直直方图。其中向量X为横坐标,要求递增或递减。参数有两种选择:grouped
29、为绘制垂直的分组直方图,stacked为绘制垂直累积直方图。如果用户不输入该参数,MATLAB默认为grouped绘图。向量X缺省时,横坐标取向量Y的序号。barh(X,Y,WIDTH,参数)绘制水平直方图。参数含义同函数bar()。【例6-13】直方图绘制函数bar()和barh()应用实例。编写文件名为exm6_13的脚本文件:cleary=round(rand(5,3)*10);%创建53数组,round()为最近点取整函数subplot(1,3,1)bar(y,group);Title(垂直分组式)legend(first,second,third)axis(0,6,0,12)xlab
30、el(x);ylabel(y)subplot(1,3,2)bar(y,stack);title(垂直累积式)axis(0,6,0,25)xlabel(x);ylabel(y)subplot(1,3,3)barh(y,0.5);title(水平分组式,宽度0.5)xlabel(x);ylabel(y);在指令窗中执行exm6_13.m文件,结果如图所示。2 饼图饼图的绘制指令为pie(),格式如下:pie(x,explode)绘制各元素占总和的百分数。如果向量x的元素和小于1,绘制不完全的饼图。explode是与向量x大小相同的向量,并且其中不为零的元素所对应的相应部分从饼图中独立出来。【例6-
31、14】绘制饼图指令pie()应用实例。编写文件名为exm6_14的脚本文件:cleardata=15 30 5 8 6;explode=0 1 0 1 0;pie(data,explode);%绘制向量data中各个元素所占比例的饼图,第二、第四部分独立在指令窗中执行exm6_14.m文件,结果如图所示。3离散杆状图和离散阶梯图离散杆状图绘图指令为stem(),调用格式如下:stem(X,Y,filled)绘制向量X对应序列Y的离散杆状图,其中filled为绘制实心杆图,该参量缺省时为绘制空心杆图。Y可以是向量或者矩阵。如果Y为向量,则长度必须与X相同;如果Y为矩阵,则Y的行数必须和X的长度相
32、同。离散阶梯状图的绘图指令为stairs(),其调用格式如下:stairs(X,Y,s)绘制向量X中对应的序列Y的阶梯状图。Y可以是向量或者矩阵。如果Y为向量,则长度必须与X相同;如果Y为矩阵,则Y的行数必须和X的长度相同。参数s是颜色,点型和线型字符串,具体含义见表6-16-3所示。【例6-15】绘图函数stem()和stairs()应用实例:绘制信号 经采样开关后产生的离散信号的杆图和阶梯图。编写文件名为exm6_15的脚本文件:cleart=linspace(0,2*pi,20);y=cos(t).*exp(-0.2*t);stem(t,y,filled);title(离散信号的杆图和阶
33、梯图实例);xlabel(t);ylabel(e-0.2tcost);hold onstairs(t,y,:k)hold off在指令窗中执行exm6_15.m文件,结果如图所示。6.4 三维绘图和二维绘图一样,三维绘图的思路仍然是从准备数据点开始,然后在坐标系内实现描点连线。与二维绘图相比,三维绘图有两个自变量,绘制的图形有线图和面图的区别,而且面图里面又存在网面图和曲面图的不同。6.4.1 三维线图绘图指令plot3()指令plot3()的调用格式如下:plot3(x,y,z,s)绘制三维曲线。其中当x,y和z是同维向量时,则绘制坐标为(x,y,z)的三维曲线;当x,y和z是同型矩阵时,绘
34、制以x,y和z元素为坐标的“列数条”三维曲线。s是指定的线型、数据点形和颜色的字符串,见表6-16-3所示。【例6-16】三维线图绘图指令plot3()应用实例:绘制三维曲线 。编写文件名为exm6_16的脚本文件:t=linspace(0,5*pi,100);x=t;y=cos(t);z=sin(t);plot3(x,y,z,b-,x,y,z,bp)xlabel(x);ylabel(y);zlabel(z);在指令窗中执行exm6_16.m文件,结果如图所示。6.4.2绘制三维网格线指令mesh()和曲面图指令surf()与三维曲线的绘制不同,三维曲面绘制时,需要确定x-y平面区域内的网格坐
35、标矩阵(X,Y),根据每一个网格点上的x,y坐标由函数关系求出函数值z。1.创建网格坐标指令meshgrid()函数meshgrid()的调用格式为:X,Y=meshgrid(x,y)将长度为m的向量x和长度为n的向量y提供的数据转换成矩阵X和矩阵Y。矩阵X行元素是向量x的复制,共复制n行;矩阵Y列元素是向量y的复制,共复制m列,因此,矩阵X和矩阵Y大小均为nm。【例6-17】指令meshgrid()创建网格坐标点实例。编写文件名为exm6_17的脚本文件:clearx=1:3;y=11:15;X,Y=meshgrid(x,y)在指令窗中执行exm6_17.m文件,结果为:X=1 2 3 1
36、2 3 1 2 3 1 2 3 1 2 3Y=11 11 11 12 12 12 13 13 13 14 14 14 15 15 15【说明】指令X,Y=meshgrid(x)等价于X,Y=meshgrid(x,x)。指令meshgrid()创建的网格坐标X,Y以及由它们计算出来的Z,各列或各行对应于一条空间曲线,空间曲线的集合组成空间曲面。2.三维网格线指令mesh()和指令meshc()mesh(X,Y,Z)绘制三维网格图。(X,Y,Z)作为x、y、z轴的自变量。一般情况下X、Y由网格坐标创建函数meshgrid()产生。当X、Y缺省时,以Z矩阵的行下标作为X坐标轴数据,Z的列下标当做Y坐
37、标轴数据。函数meshc()绘制带有轮廓线的三维网格图,使用方法与函数mesh()相同。编写文件名为exm6_18的脚本文件:clearx=linspace(0,4,30);y=linspace(0,3,20);X,Y=meshgrid(x,y);Z=X.2+Y.2;mesh(X,Y,Z)xlabel(x-axis),ylabel(y-axis),zlabel(z-axis);title(指令mesh()绘图实例);在指令窗中执行exm6_18.m文件,结果如图所示。【例6-18】函数mesh()应用实例:绘制函数 ,其中【例6-19】指令meshc()应用实例:绘制函数 编写文件名为exm6
38、_19的脚本文件:clearx=linspace(0,2*pi,100);y=x;X,Y=meshgrid(x,y);Z=sin(X).*cos(Y);meshc(X,Y,Z);在指令窗中执行exm6_19.m文件,结果如图所示。3.绘制三维曲面图指令surf()和指令surfc()指令surf(X,Y,Z)用来绘制三维曲面图,其中,(X,Y,Z)作为x、y、z轴的自变量。一般情况下X、Y由网格坐标创建函数meshgrid()产生。这些与指令mesh()的使用方法完全相同。指令surfc()绘制带有轮廓线的三维曲面图,使用方法与指令surf()相同。【例6-20】指令surf()应用实例:绘制
39、函数 编写文件名为exm6_20的脚本文件:clear,x=linspace(-3,3,20);X,Y=meshgrid(x);%创建网格点坐标Z=2*(X+Y).*exp(-X.2/2-Y.2/2);subplot(2,2,1),surf(X,Y,Z)%网面图title(网面图)colormap(cool)%着色指令subplot(2,2,2),surfc(X,Y,Z)%带轮廓线的网面图title(带轮廓线的网面图)subplot(2,2,3),mesh(X,Y,Z)%网格图title(网格图)subplot(2,2,4),contour3(X,Y,Z,10)%绘制10条三维等高线图titl
40、e(三维等高线图)图 6.23 指令 surf()、surfc()、mesh()和contour3()绘图效果比较在指令窗中执行在指令窗中执行exm6_20.m文件,结果如图文件,结果如图6.23所示。所示。【例6-20】指令surf()应用实例:绘制函数 6.4.3 色彩处理色彩是表现图形的一个非常重要的手段,而色图(Colormap)是MATLAB着色的基础。对图形色彩的处理用户可以用以下两种方式来设置:1,RGB三元组三元组一种色彩用一种色彩用R G B基色三元行向量表示。向量元素基色三元行向量表示。向量元素R、G、B分别表示红分别表示红(Red)、绿、绿(Green)、蓝、蓝(Blue
41、)基色相对亮度,其值在基色相对亮度,其值在0,1区间区间。常用的数据向。常用的数据向量表示的颜色含义如表量表示的颜色含义如表6-10所示。所示。表6-10 常用的颜色向量2,色图矩阵和色图色图矩阵是用m3的RGB三元组表示颜色的一种方法,其中矩阵的每一行是一个三元组,代表一种颜色。色图矩阵可以用颜色向量组合表示,也可以通过调用指令colormap()来定义。colormap()的调用格式如下:colormap(map)通过矩阵map设置当前色图,map缺省时为设置或获取当前色图。色图矩阵的第k行定义了第k个颜色,其中map(k,:)=r(k),g(k),b(k)指定了组成该颜色中黄色、绿色和蓝
42、色的强度。MATLAB每个图形窗只能有一个色图矩阵每个图形窗只能有一个色图矩阵。常用的色图矩阵如表。常用的色图矩阵如表6-11所示所示2,色图矩阵和色图【例6.21】绘制函数的三维曲面图 ,并设置色图。编写文件名为exm6_21的脚本文件:clear,clfx,y=meshgrid(-2:0.1:2,-1:0.1:1);z=sqrt(x.2+y.2);surf(z);%绘制三维王面图colormap(.5 0 0);%设置色图colormap(hot(128);%重新设置色彩cmap=colormap;%获取当前色图矩阵在指令窗中执行exm6_21即可观察图形着色效果如图所示。3 三维表面图形
43、色彩的浓淡处理表面色彩浓淡处理的三种方式:shading flat 对曲面图的某整个小片或网线图的某整段网格线着同一种颜色。shading faceted 在flat着色的基础上,再在小片交接的四周勾画黑色,这种方式立体表现力最强,因此MATLAB将它设置为默认方式。shading interp 着色时使小片根据四顶点的颜色产生连续的变化,或根据网格线的线段两端产生连续的变化,这种方式着色细腻但费时间。【例6-22】三种浓淡处理方式的效果比较。编写文件名为exm6_22的脚本文件:clear,clf,x=linspace(-3,3,20);X,Y=meshgrid(x);Z=X.*exp(-X
44、.2/2-Y.2/2);surf(Z);subplot(1,3,1);surf(X,Y,Z);title(shading faceted)subplot(1,3,2);surf(X,Y,Z);shading flat;title(shading flat)subplot(1,3,3);surf(X,Y,Z);shading interp;title(shading interp)在指令窗中执行exm6_22.m文件,结果如图所示。4.照明和材质处理MATLAB提供了实现灯光设置、照明模式和反射光处理的指令。用户使用这些指令,可以使图形表现得更加真实。这些指令以及功能主要有:light(colo
45、r,option1,style,option1,position,option1)实现灯光设置:option1可采用RGB三元组或相应的色彩字符,如0,1,0或g都代表绿色;option2有两个取值:infinite和local。前者代表无穷远光,后者代表近光。option3总是直角坐标下的三元组显示。对远光,它代表光线穿过该点射向原点;对于近光,它表示光源所在位置。这三个输入宗量对中的任何一对都可以缺省。如果都缺省时,MATLAB采用的默认设置为:白光、无穷远、穿过1,0,1射向坐标原点。lighting options设置照明模式。该指令只有在light()指令执行后才起作用。option
46、s可以由4种取值:(1)flat:入射光均匀洒落在图像对象的每个面上,主要与facted配用。它也是MATLAB的缺省设置。(2)gouraund:先对顶点颜色插补,再对顶点勾画的面色进行插补。用于曲面表现。(3)phon:对顶点处法线插值,在计算各像素的反光。表现效果最好,但费时较多。(4)none:关闭所有光源。material options预定义反射模式:options可以由3种取值:(1)shiny:使得对象更加明亮。(2)dull:使得对象比较黯淡。(3)metal:使得对象带金属光泽。该模式也为MATLAB的默认模式4.照明和材质处理5.观察点控制改变观察点位置可以获得较好的三维
47、视觉效果。MATLAB实现观察点控制指令为view(),调用格式为:view(az,el)和view(vx,vy,vz)前者通过方位角az和俯视角el来设置观察点位置。它们的单位为度。后者是通过直角坐标设置观察点位置。6.4.4 图形的镂空和裁切图形的镂空可以通过给图形中镂空部分是数据赋值为非数,即NaN,即可显示镂空。如果将该位置赋值为0,则实现裁切。【例6-23】图形的镂空和裁切:绘制函数 ,并对该图分别实现镂空和裁切。编写文件名为exm6_23的脚本文件:clear,clf,x=linspace(-2,2,20);X,Y=meshgrid(x);Z=sin(X).*cos(Y);Z1=Z
48、;Z2=Z;%绘制镂空图Z1(12:16,3:5)=NaN;%实现镂空subplot(1,2,1),surf(X,Y,Z1)title(镂空图)%绘制裁切图ii=find(abs(X)1.5|abs(Y)1.5);Z2(ii)=0;%实现裁切subplot(1,2,2),surf(X,Y,Z2),title(裁切图)colormap(copper)%着色light(position,0,-15,1);%光照位置lighting phong,material(0.8,0.8,0.5,10,0.5)图 6.25 三维图形的裁切与镂空图在指令窗中执行在指令窗中执行exm6_23.m文件,结果如果文件
49、,结果如果6.25所示。所示。【例6-23】图形的镂空和裁切:绘制函数 ,并对该图分别实现镂空和裁切。6.4.5 图像与动画1.图像的读写 与数据文字读写不同,MATLAB中图像文件的读写是通过指令imread()和 imwrite()来实现,调用格式如下:X,cmap=imread(filename,FMT)获取文件格式为FMT的图像文件filename数据阵X和伴随色图cmap。imwrite(X,cmap,filename,FMT)将图像数据的存放矩阵X和伴随色图cmap写入格式为FMT的图像文件filename中。image(X)显示数据存放矩阵X的图像。例【6-24】图像文件的读取和
50、图像的显示。clear,clf,X,cmap=imread(autumn.tif);%将图像文件读入工作空间变量X中。如果文件不在当前目录或者搜索路径上必须输入文件路径image(X);colormap(cmap);%显示数据存放矩阵X的图像imwrite(X,tt.jpg,Quality,100);%数据存放矩阵X保存为图像tt.jpgimage(imread(tt.jpg)%读取jpg格式图像并显示axis image off%隐去坐标执行结果如图所示。2.播放动画MATLAB中能进行简单的动画处理,提供的动画处理指令为getframe,调用格式为:M(i)=getframe 截取当前画面