MATLAB-ch03(计算结果可视化).ppt
第3讲 计算结果可视化,张建瓴,3.1 MATLAB的图形窗口,MATLAB有一个用于图形输出的专用窗口,称为图形窗口(Figure Window)。通过该图形窗口,可以自由查看和设置有关图形输出及表达的参数,并获得高质量的图形文件。,一、创建与控制图形输出窗口,在执行一个绘图命令(如plot命令)前,MATLAB并没有打开图形窗口,只有在执行创建图形窗口命令后,系统才会自动创建一个图形窗口。若在命令执行前,已经存在了若干窗口,绘图命令会将图像输出到当前窗口,并将原来存在的该窗口的图像覆盖掉。,一、创建与控制图形输出窗口,创建图形窗口的命令为figure,有两种调用格式:,(1)figure(2)figure(n),1、figure命令,直接在命令窗口中键入“figure”,将产生如图3-l所示的图形窗口,该窗口由菜单栏、工具栏和图形区三部分组成。,figure命令格式生成的图形窗口名称是按照窗口创建的先后顺序依次命名的,如figure No.1,figure No.2,figure No.n.。,2、figure(n)命令,figure(n)命令将创建一个名为figure No.n的新空白图形窗口,假如窗口figure No.n已经存在,则将该窗口设置为当前窗口。,二、图形窗口的操作,3.2 二维(平面)图形,一、基本绘图命令,1、线性坐标曲线plot,函数命令plot是MATLAB二维曲线绘图中最简单、最重要、使用最广泛的一个线性绘图函数。它可以生成线段、曲线和参数方程曲线的函数图形,对于不同的输入参数,该函数有不同的形式以实现不同的功能。同时,有许多其他特殊的绘图命令都以它为基础的。,(1)plot(y),【功能】:绘制以y为纵坐标的二维曲线,其中参数y可以是向量或矩阵。,【格式】:以参数y的值为纵坐标,横坐标从1开始自动赋值为向量1 2 3 4 或其转置向量,向量的方向和长度与参数y相同。,例3-1example3-1.m,用命令plot(y)绘曲线,其中y=5 3 4 9 0 2 3。,y=5 3 4 9 0 2 3;plot(y),回车,运行结果显示出如图3-2所示的曲线,其横坐标为向量1 2 3 4 5 6 7的元素值,纵坐标为向量y的元素值。,(2)参数调用方式:plot(x,y),【功能】:绘制以x为横坐标,y为纵坐标的二维曲线,其中参数x和y可以是向量或矩阵。,【格式】:参数x和y都是长度为n的向量,x为横坐标向量,y为纵坐标向量。,【说明】:Plot(x,y)命令格式,还可以包括多个长度和x向量相等的列向量,此时将在图形窗口中绘制出多条曲线。,例3-2example3-2.m,简单例题,比较方便的试验指令,t=(0:pi/50:2*pi);k=0.4:0.1:1;Y=cos(t)*k;plot(t,Y)%结果如图3-3所示,【说明】:plot(x,y)命令多用来生成参数方程的图形。x和y必须方向相同(行或列)、长度相等,否则MATLAB将提示错误信息。,例3-3example3-3.m,绘制函数y=cos(x)在两个周期内的图形。,t=0:0.01:2*pi;y=cos(t);plot(t,y),将绘出如图3-4所示的两个周期的余弦曲线。,例3-4example3-4.m,在同一图形窗口中绘出正弦余弦函数的图形。,t=0:0.01:2*pi;y=sin(t);cos(t);plot(t,y),绘出的曲线见图3-5。,(3)plot(Y),在plot(Y)中,Y是一个mn的矩阵。MATLAB为矩阵的每一列划出一条线,共n条曲线。同时以矩阵的行向量为基准对x轴进行分度和标注,标注时采用向量l:m,这里m是矩阵的行数。,例3-5example3-5.m,绘制矩阵Y=5 4 3 8 9 10;3 4 4 5 8 2;8 12 13 21 18 25;9 8 8 9 6 7的图形。,Y=5 4 3 8 9 10;3 4 4 5 8 2;8 12 13 21 18 25;9 8 8 9 6 7;plot(Y),如图3-6所示,MATLAB按矩阵Y的列向量绘制出六条曲线,而x轴的取值则为矩阵Y的行向量,即取1 2 3 4。,(4)混合调用方式:plot(X,Y),在混合式的命令格式中,对于X和Y而言,可分下列几种情况:,如果X和Y都是向量,则长度必须相等;,如果X是向量,而Y是一个矩阵,X的长度与矩阵Y的行数或列数相等,则它的作用是将向量X与矩阵Y的每列或每行的向量相对应作折(曲)线,当Y是方阵时,则将向量X与矩阵Y的列向量对应作图;,如果X是矩阵,Y是向量,Y的长度等于矩阵X的行数或列数,则将X的每列或每行的向量与Y相对应作图。当X是方阵时,则将X的各列与Y对应作图;,如果X和Y都是矩阵,且维数相同,则按列与列的对应方式来作图。,例3-6example3-6.m,绘制混合式的图形。,x=l:length(peaks);plot(x,peaks),执行结果如图3-7所示。,例3-7example3-7.m,采用模型 画一组椭圆曲线,【分析】:需要画的图形是一个平面图形,因此要使用plot函数。,引入中间变量,令:x=a sin,则,例3-7example3-7.m(续1),程序:,X=cos(cta)*a;%X为1019的矩阵Y=sin(cta)*sqrt(25-a.2);%Y为1019的矩阵,plot(X,Y),axis(equal),xlabel(x),ylabel(y)title(A set of Ellipses)%结果入图3-8所示,cta=0:pi/50:2*pi;%定义中间变量cta为长度101的列向量a=0.5:0.5:4.5;%定义a为长度9的行向量,代表所画椭圆的个数,(5)复向量调用方式:plot(Z),当向量Z为一个复数向量时,MATLAB将会忽略向量的虚部。也可以在调用时独立给出一个复参数,这时相当于两个指令的组合。例如,命令plot(Z)和plot(real(Z),imag(Z)是等效的(这里Z是一个复向量)。,【说明】:plot(Z)是以实部为横坐标,以虚部为纵坐标来绘制曲线。,例3-8example3-8.m,用复数矩阵形式画Lissajous图形(在模拟信号时,Lissajous图形常用来测量信号的频率),t=linspace(0,2*pi,80);%X=cos(t),cos(2*t),cos(3*t)+i*sin(t)*1,1,1;%(803)的复数矩阵,结果如图3-9所示。,plot(X)%axis square%使坐标轴长度相同 legend(1,2,3)%图例,(6)综合调用方式:plot(x1,y1,x2,y2,),【功能】:在同一窗口绘制多条曲线,而且每条曲线的横坐标可以不同,每一组向量也可以有不同的长度。,例3-9example3-9.m,在同一窗口中绘制多条曲线,并且坐标和长度都不同。,tl=0:0.1:3*pi;t2=0:0.1:6;plot(tl,sin(t1),t2,sqrt(t2),运行结果如图3-10所示,两条曲线的长度和坐标都不相同。,例3-10example3-10.m,用图形表示连续调制波形y=sin(t)sin(9t)及其包络线。,t=(0:pi/100:pi);%长度为101的时间采样列向量 y1=sin(t)*1,-1;%包络线函数值,是(1012)的矩阵 y2=sin(t).*sin(9*t);%长度为101的调制波列向量,结果如图3-11所示。,t3=pi*(0:9)/9;%y3=sin(t3).*sin(9*t3);plot(t,y1,r:,t,y2,b,t3,y3,bo)%axis(0,pi,-1,1)%控制轴的范围,2、对数坐标曲线,在MATLAB中,使用函数semilogx、semilogy和loglog用来绘制二维对数坐标曲线,这几个命令的用法和函数plot相同。,(1)semilogx(2)semilogy(3)loglog,【说明】:函数semilogx绘出的曲线,其横坐标为对数坐标;而函数semilogy绘制的曲线纵坐标为对数坐标;loglog绘制的曲线,横纵坐标均为对数坐标。,例3-12example3-12.m,绘制正弦函数的对数坐标曲线。,t=0.1:0.1:3*pi;y=sin(t);semilogx(t,y)grid on%grid on命令是为图形窗口添加网格,运行结果如图3-12所示。,3、双y轴图形,用plotyy函数可以绘制左右均有y轴的图形,有以下几种常用的调用格式:,(1)plotyy(x1,y1,x2,y2),【功能】:此种调用格式可以在窗口中同时绘制两条曲线:(xl,y1)和(x2,y2),曲线(x1,y1)用左侧的y轴,曲线(x2,y2)用右侧的y轴。,(2)poltyy(x1,y1,x2,y2,fun),这种命令格式的使用与上面相同,只是多了fun一项。fun是字符串格式,用来指定绘图的函数名,如plot、semilogx、semilogy等。例如:,plotyy(xl,yl,x2,y2,semilogx);%用函数semilogx来绘制两条曲线,例3-15example3-15.m,用plotyy函数绘制双y轴图形。,tl=0:0.1:3*pi;t2=0:0.1:6;yl=sin(t1);y2=sqrt(t2);plotyy(tl,y1,t2,y2,semilogx)grid on 为图形窗口添加网格,程序运行结果所绘的曲线如图3-13所示。,(3)poltyy(x1,y1,x2,y2,fun1,fun2),同第二种命令格式相类似,只是用funl和fun2指定不同的绘图函数分别绘制这两条曲线。,例3-17example3-17.m,在同一图形窗口中,用不同的绘图函数绘制同一函数曲线 的双y轴图形。,x=0:0.1:6;y=sqrt(x);plotyy(x,y,x,y,semilogy,plot),结果如图3-14所示。从图中可知,左侧的y轴为对数坐标,它与semilogy函数绘制的曲线对应;右侧的y轴为线性坐标,它与plot函数绘制的曲线对应。,【注意】,plotyy函数不能加入设置曲线线型、颇色及标出数据点的参数。,二、线型与颜色,一般情况下,plot等函数在绘图时MATLAB自动安排作图的线型和线段的颜色以及线段顶点的标记。事实上,MATLAB中可以设置和管理曲线的线段类型、顶点标记和线段颜色等。,1、线型和颜色的参数,MATLAB定义的常用线段类型、顶点标记和线段颜色的参数如表3-1所示。,2、线型和颜色的设置,【格式】:在MATLAB(如plot函数)中,最典型的调用方式是三元组参数形式,即:,plot(x,y,s)%s为类型说明参数,它是字符串,由表3-1中列出的符号组成,【注意】:,(1)s字符串可以是三种类型的符号之一(颜色、线型和顶点标记之一),也可以是线型与颜色和顶点标记与颜色的组合。例如,字符串“r”表示绘制红色的虚型;“:yx”表示绘制黄色点线,同时用符号“:x”标记数据点。,【注意】(续),(2)在plot函数指令中,如果没有s参数,plot将使用缺省设置绘制曲线。MATLAB缺省规定曲线一律用“实线”线型。不同曲线将按表3-1所给的前7种颜色次序着色。,(3)通常在当前坐标系中绘图时,每调入一次绘图函数,如调用plot时,MATLAB将擦掉坐标系中已有的图形对象。为了在一个坐标系中增加新的图形对象,可以用MATLAB的hold on命令达到这个目的。设置了hold on后,MATLAB再生成新的图形时,保留当前坐标系中已存在的图形对象。此时,MATLAB根据新图形的大小,可能会重新改变坐标系的比例。,例3-18example3-18.m,用不同的线型和标注来绘制两条曲线。,tl=0:0.1:2*pi;t2=0:0.1:6;yl=sin(t1);y2=sqrt(t2);plot(t1,y1,:hb,t2,y2,g),运行结果如图3-15所示。图中,正弦曲线用蓝色点线表示,其数值点用六角形绘制,而第二条函数曲线用绿色虚线表示。,三、fplot函数,一般的绘图命令,如plot等在绘制一个函数y=f(x)的图形时,必须先定义自变量调用的一组取值点,再求出这组取值点的函数值,然后根据这两组数值确定的数据点绘制出所需的图形。而在实际应用中绘制函数二维曲线时一般并不清楚函数的具体情况,因而在确定自变量x的取值间隔时,一律用平均间隔,用这种方法绘制的的图形不够准确。,1、fplot函数的特点,二维数值函数曲线专用命令fplot是绘制函数y=f(x)图形的一个专用命令。该命令的特点在于它的绘图数据点是自适应产生的,即在函数曲线平坦处,它所取数据点比较稀疏,而在函数变化剧烈处,它将自动取较密的数据点。,2、fplot函数的调用格式,X,Y=fplot(fun,lims,tol,n,linespace,p1,p2,)或fplot(fun,lims,tol,n,linespace,p1,p2,),各参数含义如下:,(1)fun 函数名字符串,可以是一个由多个分量函数构成的函数行向量,分量函数可以是MATLAB的已有函数,也可以是用户自己定义的函数;,(2)lims 定义z的取值区间,lims=xmin,xmax;,各参数含义(续),(3)tol 相对误差,默认值为2e-3,tol越小,所绘制的曲线就越接近实际曲线的情况,但系统将为此占用很大资源;,(4)n 绘图的最少点数(n+1);,(5)linespec 线性设置;,(6)p1,p2,函数传递参数;,(7)X,Y 数组数据点坐标。,【注意】,上述命令的格式调用时,MATLAB会把数据点坐标输入X、Y,并没有用图形显示出来,如需要显示图形,可以不加这两个参数;如果要使用tol,n或是linespec的默认参数,可以给函数传递一个空矩阵作为参数;,在相同的数据下,自适应取点所绘的图形更加真实;自适应取点所用的时间较长。,例3-20example3_20.m,fplot和plot命令的比较。,(1)创建函数M文件funfplot function y=funfplot(x)y=sin(1./tan(pi.*x);,(2)将用分配咯fplot命令求得的坐标点,按照对应大小,创建一个等间距坐标点赋值给矩阵X,Y X,Y=fplot(funfplot,-0.1,0.1,2e-4);n=size(X);x=-0.1:0.2/(n(1)+1):0.1;y=funfplot(x);,例3-20example3_20.m(续),(3)用fplot和plot命令作图,比较二者的不同 plot(x,y)figure 打开一个新的图形窗口 plot(X,Y)该命令等价于fplot(funfplot,-0.1,0.1,2e-4),运行结果如图3-12、图3-13所示。,四、ezplot函数,1、ezplot函数的特点,ezplot函数是二维符号函数或字符串函数的专用绘图命令。,2、ezplot的调用格式,ezplot(sym-fun,limits),各参数含义如下:,(1)sym-fun 符号函数或代表它的符号变量;(2)limits 为自变量x的取值范围,即limits=xl,x2,其默认值为-2pi,2pi。,例3-22example3_22.m,ezplot绘图函数的用法。,syms xf=(x2)(cos(x)2);ezplot(f),其运行结果如图3-18所示。,五、图形窗口的分割,有时需要在一个图形窗口中显示几幅图形,以便对几个函数进行直观的比较。由于每个绘图命令在绘制数据图像时都会将已有的图形覆盖掉,而用hold命令不能实现同时显示几个不同坐标尺寸下的图形,用figure命令再创窗口又很难同时比较由不同的数据绘得的图像。,1、subpolt函数的作用,MATLAB中,subplot函数用来实现在同一个窗口中同时显示多个图像。,2、subpolt函数的调用格式,subplot(m,n,i),【含义】:,把图形窗口分割为m行n列子窗口,然后选定第i个窗口为当前窗口。例如:subplot(2,2,4)意为把图形窗口分为2行2列共4个子窗口,选择第2行第2列(排序为4)的子窗口为当前窗口进行操作。,3、subplot函数的使用,subplot命令不仅用于二维图形,对三维图形一样适用。其本质是将figure窗口分为几个区域,再在每个区域内分别绘图。,(1)如果坐标系存在,则将其设为当前坐标系。,subplot(position,left bottom width height),是在普通坐标系中创建一个新的坐标系。其中各参量在0到1之间取值。,3、subplot函数的使用(续),(2)如果subplot命令所指定的区域与原有的区域重合(全部或部分),原区域将被删除。,(3)subplot(111)是一个特殊的情况,它与subplot(1,1,1)不同,该调用并不立刻创建坐标系,而是使下一条绘图命令在窗口中执行clf和reset命令(删除当前图形的所有子对象),然后在默认位置创建一个坐标系。这种调用没有返回值。,例3-25example3_25.m,用subplot函数把两种不同的图形综合在一个图形窗口中。,subplot(2,2,1)t=0.1:0.1:2*pi;y=sin(t);semilogx(t,y)grid onsubplot(2,2,2)t=0:0.1:4*pi;y=sin(t);plot(t,y),其运行结果如图3-20所示。,subplot(2,2,3)x=1:0.01:5;y=exp(x);plotyy(x,y,x,y,semilogx,plot),subplot(2,2,4)x=1:0.1:10;y=sqrt(x);plot(x,y,:rd),六、坐标系的调整,MATLAB的绘图函数可以根据要绘制的曲线数据范围自动地选择合适的坐标系,使曲线尽可能清晰地显示出来。因此,一般情况下用户不必自己选择绘图坐标。如果觉得自动选择的坐标不太合适,则可以用手动的方式选择新的坐标系。,在MATLAB中能实现坐标系调整的命令是axis函数。其调用格式为:,axis(smin,xmax,ymin,ymax,zmin,zmax),【注意】:,坐标的最小值(xmin,ymin,zmin)必须小于相应的最大值(zmax,ymax,zmax),否则会出错。,例3-26example3_26.m,使用自动坐标系与用axis函数调整后的坐标系的比较。,subplot(2,1,1)t=0:0.1:4*pi;y=sin(t);plot(t,y),其运行结果如图3-22所示。,subplot(2,1,2)t=0:0.1:4*pi;y=sin(t);plot(t,y)axis(0,max(t),min(y),max(y),七、绘制曲线(图形)的一般步骤,1、曲线数据准备,2、指定图形窗口和子图位置,3、设置曲线的绘制方式,4、设置坐标轴,5、图形注释,6、图形修饰(着色、明暗),3.3 三维图形,MATLAB具有强大的三维图形处理功能,包括三维数据显示、空间曲线、曲面、分块、填充以及曲面光顺着色、视点变换、旋转、隐藏等功能和操作。,一、基本三维绘图命令,1、三维线图指令plot3,三维线图指令plot3主要用来表现单参数的三维曲线。,【调用格式】:,plot3(X1,Y1,Zl,sl,X2,Y2,Z2,s2,)或 plot3(X,Y,Z,s),参数含义,(1)Xn、Yn、Zn分别为第一到三维数据,是向量或矩阵,但必须尺寸相等;,(2)s、s1、s2是可选的字符串,用来设置线型、颜色以及数据点标记等。,【说明】,(1)X、Y、Z是同维向量时,则绘制以向量X、Y、Z的元素为x、y、z坐标的三维曲线。,(2)X、Y、Z是同维矩阵时,则以X,Y、Z对应列元素为x、y、z坐标分别绘制曲线,曲线条数等于矩阵的列数。,(3)绘线“四元组”(Z1,Y1,Z1,s1),(X2,Y2,Z2,s2)的结构和作用与(X,Y,Z,s)相同。不同的是“四元组”之间没有约束关系。,例3-30example3_30.m,绘制一个三维螺旋线。,t=0:0.1:8*pi;plot3(sin(t),cos(t),t),程序运行结果如图3-20所示。,title(绘制螺旋线)用命令title对图形主题进行标注xlabel(sin(t),FontWeight,bold,FontAngle,italic)ylabel(cos(t),FontWeight,bold,FontAngle,italic)zlabel(t,FontWeight,bold,FontAngle,italic)命令zlabel用来指定z轴的数据名称grid on,【说明】,(1)在图3-20中,如果把图中的z轴(t)去掉,即相当于从上往下看这幅图时,它是一个圆,这和plot(sin(t),cos(t)绘制的曲线相同,由此可见,plor3实际上就是二维函数plot在三维空间上的扩展;,(2)命令zlabel用来指定z轴的数据名称;,(3)命令grid on是在图底绘制三维网格;,(4)命令title是对图形主题的标注。,例3-31example3_31.m,x、y、z都是矩阵时,plot3命令的使用。,X,Y=meshgrid(-pi:0.1:pi);Z=sin(X)+cos(Y);plot3(X,Y,Z),执行结果如图3-21所示。,例3-33example3_33.m,简单例题,t=(0:0.02:2)*pi;x=sin(t);y=cos(t);z=cos(2*t);plot3(x,y,z,b-,x,y,z,bd),view(-82,58),box on,legend(链,宝石),运行结果如图3-22所示。,二、线和面填色,在MATLAB中,函数fill和patch是图形的填充函数,它们的用法基本相同。,1、patch函数,【调用格式】:,(1)绘制二维图形时:patch(X,Y,C)(2)绘制三维图形时:patch(X,Y,Z,C),函数中参数X、Y、Z是向量或矩阵,C用来指定颜色。,例3-35example3_35.m,用patch函数命令建立一个六边形,其填充颜色为红色。,patch(0,0.2,0.5,0.8,1,0.5,0,1,0.3,0,0.3,1,1.8,1,r),执行结果如图3-25所示。,三、三维曲面绘图命令,三维曲面绘图命令可分为平面网格点的生成、在平面网格基础上绘制三维网格以及对三维表面进行处理三个步骤。,1、平面网格点的生成,在数学上,函数z=f(x,y)的图像是三维空间的曲面,在MATLAB中,总是假设函数z=(x,y)定义在一个矩形的区域D=x0,xmy0,yn上。为了绘制在区域D上的三维曲面,MATLAB的方法是首先将x0,xm在x方向分成m份,将y0,yn在y方向分成n份,由各分划点分别作平行于坐标轴的直线,将区域D分成mn个小矩形,计算出网格点的函数值。对于每个小矩形,在空间中决定出四个顶点(xi,yi,f(xi,yi),连接四个顶点得到一个空间的四边形片。而所有这些四边形片连在一起构成函数z=f(x,y)定义在区域D上的空间网格曲面。,1、平面网格点的生成(续),在MATLAB中,用函数meshgrid命令来生成x-y平面上的小矩形顶点坐标值的矩阵。其调用形式为:,X,Y=meshgrid(x,y),或,参数含义,X,Y=meshgrid(x)此种形式等价于X,Y=meshgrid(x,x),(1)x是区间x0,xm上分划点组成的向量;,(2)y是区间y0,yn上分划点组成的向量;,(3)X,Y为输出变量矩阵,矩阵X的行向量都是向量x,矩阵Y的列向量都是向量y。,【说明】,(1)X和Y的元素组(X(i,j),Y(i,j)恰好是区域D的第(i,j)网格顶点。例如,(X(1,1),Y(1,1)对应于(x0,y0)点,而(X(m+1,n+1),Y(m+l,n+1)对应于(xm,xn)点。也就是说,函数meshgrid将有两个向量决定的区域转换为对应的网格点矩阵。,(2)在计算网格点处的函数值时,由于矩阵X和Y的对应元素恰好组成某个网格点,因此利用MATLAB的矩阵运算能力,可以很容易地求出由所有网格点上的函数值组成的矩阵。,例3-37example3_37.m,数学函数 其定义区域-2,2-2,2。在生成网格后,计算网格点上的函数值。,X,Y=meshgrid(-2:2:2,-2:2:2);X,Y:将划分结果输出至矩阵X,Y ans=-2 0 2-2-2-2-2 0 2 0 0 0-2 0 2 2 2 2Z=X.*exp(-X.2-Y.2);计算网格点上的函数值赋予变量Z Z=-0.0007 0 0.0007-0.0366 0 0.0366-0.0007 0 0.0007,2、三维网格命令mesh、meshc、meshz,(1)三维网格命令mesh,在得到了网格点上的函数值矩阵后,可以利用MATLAB中函数mesh来生成函数的网格曲面,即各网格线段组成的曲面。Mesh函数的调用格式如下:,esh(X,Y,Z,C)这是最一般的调用形式。X、Y、Z、C是同维数的矩阵,X、Y、Z对应确定空间上的网格点,C为颜色矩阵。也就是说,网格曲面的顶点对应于空间的顶点(X(i,j),Y(i,j),Z(i,j),而网格曲面的网格线颜色由C的值根据当前的色谱来着色。此种调用形式还可以用来生成参数曲面片。,mesh(X,Y,Z)调用形式如同esh(X,Y,Z,C)中C=Z的情况。,(1)三维网格命令mesh,mesh(x,y,Z,C)其中x和y是向量,Z和C是同维数的矩阵,并且向量x的长度等于矩阵Z的列数,而向量y的长度等于矩阵Z的行数。即length(x)=n,length(y)=m,这里m,n=size(Z)。此时网格曲面的网格顶点是(x(j),y(i).z(i,j),网格线的颜色由矩阵C决定。,mesh(x,y,Z)调用形式如同mesh(x,y,Z,C)中C=Z的简单调用形式。,mesh(Z,C)Z和C都是mn的矩阵,等价于mesh(x,y,Z,C),只是此时向量x=1:n,向量y=1:m。,(1)三维网格命令mesh(续),mesh(Z)调用形式如同mesh(Z,C)中C=Z的简单调用形式。,mesh(,PropertyName,PropertyValue,)此种调用形式是给函数mesh设置曲面属性,具体用法同前面。,例3-38example3_38.m,用mesh命令绘制函数在其定义区域-2,2-2,2内的网格曲面。,X,Y=meshgrid(-2:0.2:2,-2:0.2:2);Z=X.*exp(-X.2-Y.2);mesh(Z),生成的图形如图3-30所示。,(2)meshc函数和meshz函数,与mesh相关的另外两个函数是meshc和meshz,它们的调用形式与mesh相同。其区别在以下方面:,meshc除生成网格曲面外,还在x-y平面上生成曲面的等高线图形。,meshz除生成与mesh相同的网格曲面外,还在曲面下面加上一个长方体的台柱,其图形更加美观。,例3-40example3_40.m,演示函数meshc和meshz的用法,注意比较它们的不同。,X,Y=meshgrid(-2:2:2,-2:2:2);Z=X.*exp(-X.2-Y.2);Subplot(2,1,1)meshc(Z)subplot(2,1,2)meshz(Z),3、三维表面命令surf,实曲面是对网格曲面的网格块区域进行着色的结果。在MATLAB中,函数surf可实现对网格曲面进行着色,将网格曲面转化为实曲面。surf命令的调用格式与mesh相同。,【注意】,函数surf的曲面生成过程与mesh相似,但着色机理与mesh不同。mesh命令仅对网格线着色,而surf是对网格片着色,网格线用黑色标出(默认)。一般情况下,surf用默认的着色方式对曲面片着色,还可以用MATLAB的函数shading来改变着色方式。,例3-42example3_42.m,利用三维网格表面命令surf绘制图形。,z=peaks;绘制山峰的图像,将函数值赋予变量zsurf(z)对山峰的图像进行着色处理shading interp,运行结果如图3-32所示。,四、pcolor函数,pcolor命令用于绘制伪彩图,其调用命令格式为:,(1)pcolor(Z)以矩阵Z的下标为横坐标绘制伪彩图;,(2)pcolor(x,y,z)以向量x、y为横坐标绘制伪彩图。,例3-43example3_43.m,用函数pcolor绘制伪彩图,pcolor(peaks),执行结果如图3-33所示。,五、surfl函数,surfl命令用于绘制在控制光线情况下的表面图。surfl()与surf()的调用格式相同,只是在函数surfl中,有控制光线视角的功能。,【注意】:,在格式surfl(Z)、surfl(X,Y,Z)、surfl(Z,S)和surfl(X,Y,Z,S)中,S是光源位置。如果S具体确定,即S=Sx,Sy,Sz或S=AZ,EL已经确定,上述格式的调用相同;默认情况下,光源在从视线角度逆时针旋转450的位置。,例3-46example3_46.m,用函数surfl命令绘制图形,surfl(peaks),执行结果如图3-25所示。,六、waterfall函数,waterfall命令用于绘制类似瀑布流水形状的网格图,其使用格式和mesh命令基本相同,只是不画纵向的线条,因而产生类似“瀑布”的效果。,例3-49example3-49.m,绘出三维高斯分布的瀑布图。,waterfall(peaks)axis tight,执行结果如图3-37所示。,七、柱面和球面的三维表达,在MATLAB中,有两个用来绘制柱面和球面的命令,即cylinder和sphere函数命令。它们可以非常简洁地绘制漂亮的彩图。,1、柱面的表达(cylinder函数),MATLAB绘制一个柱面首先要给出它的母线和轴线。而在cylinder命令中,柱面的轴线已经定义为z轴,因此只要给出母线的描述就可以完成一个柱面,再加上参数就可完成一个完整的柱面。,1、cylinder函数的调用格式,(1)X,Y,Z=cylinder(R,N),,其中:,R是一描述柱面母线的向量;,N是旋转柱面上的分割线条数;,X,Y,Z是cylinder命令执行后,返回的x、y、z坐标向量,可以用surf(X,Y,Z)函数命令显示柱面。,(2)X,Y,Z=cylinder(R)缺省值N=20;,(3)X,Y,Z=cylinder 缺省值N=20,R=1,1。,例3-49example3_49.m,绘制一个柱面。,t=pi:0.01:3*pi;r=sin(t)+t;cylinder(r,30)shading interp,执行结果如图3-25所示。,2、球面的表达(sphere函数),由于绘制球体只是一个单位球面,因此比绘制柱面要简单,其调用格式为:,(1)X,Y,Z=sphere(N)此种格式将产生一个三维的(n+1)(n+1)的矩阵,然后用函数surf命令绘制一个单位的球面;,(2)X,Y,Z=sphere 此种格式中,其缺省值N=20。,其中N表示设置分割线的条数。,3.4 三维图形可视效果的控制,三维视图表现的是一个空间图形,因此,从不同的位置和角度观察图形有不同的效果。另外,在复杂的三维图形中,经常会出现图形的某一部分被遮住的情况,这会对一些问题的分析造成严重的影响。因此有必要对视图可视效果进行控制。,一、观察点和视觉的控制(view函数),在MATLAB中,控制图形观察点和视觉的函数是view,其使用格式如下:,(1)view(AZ,EL)和view(AZ,EL)通过方位角和俯视角设置观察图形的视点。其中:AZ为方位角(Azimuth),指在x-y平面内从y轴负方向绕z轴旋转的角度,以逆时针为正;EL为俯视角(Elevition),指在x-y平面沿z轴方向仰起的角度。,view函数的调用格式(续),(2)view(X,Y,Z)通过直角坐标系设置视点。,(3)AZ,EL=view 返回当前的方位角AZ和俯视角EL。,(4)view(T)用一个44的转矩阵T来设置视角。,(5)T=view 返回当前的44的转矩阵。,【注意】:,(1)view(2)格式 设置缺省的二维视角。二维图形缺省值为AZ=0;EL=90。,(2)view(3)格式 设置缺省的三维视角。三维图形缺省值为AZ=-37.5、EL=30。,例3-51example3_51.m,练习使用函数view的用法。,X,Y=meshgrid(-8:0.5:8);R=sqrt(X.2+Y.2)+eps;Z=sin(R)./R;subplot(2,2,1)缺省视角surf(X,Y,Z)xlabel(X轴,FontWeight,bold)ylabel(Y轴,FontWeight,b01d)zlabel(Z轴,FontWeight,bold)tifie(fonmame隶书缺省视角),subplot(2,2,2)surf(X,Y,Z)xlabel(X轴,FontWeight,bold)ylabel(Y轴,FontWeight,bold)zlabel(Z轴,FontWeight,bold)title(fontname隶书方位角为900 仰角为00)view(90,0),例3-51example3_51.m(续1),subplot(2,2,3)surf(X,Y,Z)xlabel(X轴,FontWeight,bold)ylabel(Y轴,FontWeight,bold)zlabel(Z轴,FontWeight,bold)fitle(fontname隶书方位角为-37.50 仰角为800)view(-37.5,80),例3-51example3_51.m(续2),subplot(2,2,4)surf(X,Y,Z)xlabel(X轴,FontWeight,bold)ylabel(Y轴,FontWeight,bold)zlabel(Z轴,FontWeight,bold)title(fonmame隶书方位角为00 仰角为900)view(0,90),执行结果如图3-45所示。,图中左上角子窗口就是平常缺省设置;右上角子窗口是把方位角在x-y平面内从y轴负方向逆时针旋转900,转到x轴的正方向,俯视角为00,即视线从x轴的正方向水平看过去的效果;左下角子窗口把方位角恢复为缺省值,俯视角为800,即从斜上方往下看时的效果图;右下角子窗口把方位角设置为00,而俯视角为900,即从正上方往下看时的效果图。,二、三维图形的照相,在MATLAB中有一种类似照相机可变焦透镜功能的函数,以实现对观察点的控制。,1、campos函数,【调用格式】:,(2)camposLX,Y,Z 设置照相机位置;,(3)campos(mode)得到照相机位置模式。,(1)CP=campos 得到当前句柄照相机位置;,例3-54example3_54.m,照相技术的应用。,X,Y=meshgrid(-8:0.5:8);R=sqrt(X.2+Y.2)+eps;Z=sin(R)./R;surf(X,Y,Z)xlabel(X轴,FontWeight,bold)ylabel(Y轴,FontWeight,bold)zlabel(Z轴,FontWeight,bold)title(fontname隶书照相技术应用),执行结果如图3-25所示。,camposcampos(36.5,49.0,-10)ans=-91.3142-119.0030 6.7452,三、三维图形的透视命令,1、hidden函数,hidden命令是开关掩盖命令。其调用命令格式为:,(2)hidden off 关掉消隐命令,从而能看到被遮挡的部分。,(1)hidden on 默认模式,消隐掉后面的网格线;,在MATLAB中,用mesh命令绘制网格图时,在默认的情况下系统会消隐掉重叠在后面的网格,而利用透视命令hid