上次课内容回顾MATLAB二维绘图1.离散函数和数据的可视化;2.二维曲线和图形•plot基本调用格式、•衍生调用格式、•可控调用格式;3.坐标控制和图形标识(坐标轴、分格线、坐标框、图形标识、精细控制)4.多次叠绘、双纵坐标和多子图;5.获取二维图形数据的指令ginput。3.3三维曲线和曲面内容提要1.三维线图指令plot3;2.三维曲面/网线图;3.颜色的使用;4.曲面/网线图的精细修饰;5.透视、镂空和裁切6.高维可视化7.图形窗功能1.三维线图指令plot3•plot3(X,Y,Z,‘s’)(单参数三维曲线)用s指定的点形线型色彩绘制曲线•plot3(X1,Y1,Z1,'s1',X2,Y2,Z2,'s2',...)用s1,s2指定的点形线型色彩绘制多类曲线说明:X、Y、Z为同维向量、矩阵、s的意义、四元组之间没有约束关系例5.3-1利用三维曲线的参数方程绘制三维图形•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]),boxon•xlabel('x'),ylabel('y'),zlabel('z')•legend('链','宝石')2.三维曲面/网线图三维图形较二维图形复杂:表现在:1.数据的准备2.三维图形色彩的使用3.明暗处理、4.光照处理、5.视点处理等(1)数据准备(很重要)•画函数所代表的三维空间曲面,需要做以下数据准备::•(1)确定自变量的取值范围和取值间隔;•(2)构成自变量x,y的自变量“格点”矩阵;•(3)计算在自变量采样“格点”上的函数值。),(yxfz(2)绘制曲面/网线图的基本指令•surf(Z)以Z矩阵列、行下标为轴自变量,画曲面图。•surf(X,Y,Z)最常用的曲面图调用格式•surf(X,Y,Z,C)最完整调用格式,画由C指定用色的曲面图。•mesh(Z)以Z矩阵列、行下标为轴自变量,画网线图。•mesh(X,Y,Z)最常用的网线图调用格式•mesh(X,Y,Z,C)最完整调用格式,画由C指定用色的网线图。说明对于最完整调用格式surf(X,Y,Z,C)和mesh(X,Y,Z,C):•四个输入宗量都是维数相同的矩阵;•X、Y是自变量“格点”矩阵;•Z是格点上的函数矩阵;•C是指定各点用色的矩阵。C可以空缺,空缺时,默认的用色矩阵C=Z。•单宗量输入绘图时,•Z矩阵的列下标当作x轴坐标的“自变量”,•把Z的行下标当作y轴坐标的“自变量”。例5.3-2用曲面图表现函数•clf•x=-4:4;y=x;•[X,Y]=meshgrid(x,y);•Z=X.^2+Y.^2;•surf(X,Y,Z);•colormap(hot)•holdon•stem3(X,Y,Z,'bo')•holdoff•xlabel('x'),ylabel('y'),zlabel('z')•axis([-5,5,-5,5,0,inf])•view([-84,21])22yxz单宗量输入时:•clf•x=-4:4;y=x;•[X,Y]=meshgrid(x,y);•Z=X.^2+Y.^2;•surf(Z);•colormap(hot)•holdon•mesh(X,Y,Z)•holdoff•xlabel('x'),ylabel('y'),zlabel('z')•view([-84,21])3、颜色的使用•但是很多时候,一个简单的二维或三维图形不能一次显示出想要提供的全部信息。•这时,颜色可以对图形提供一个附加的维数。•许多绘图函数都可以接受一个可用的颜色参量,来增加这附加的维数。本小节以研究颜色映象开始:•如何使用、显示、修改和如何创建用户自己的颜色映象。•然后,阐述在一个图形窗口中仿真多个颜色映象的技术或只使用颜色映象的一部分的技术。•最后,讨论照明模型并提供例子。(1)颜色映像简介•MATLAB有一个叫颜色映象的数据结构来代表颜色值。•颜色映象定义为一个有三列和若干行的矩阵。•利用0到1之间的数,矩阵的每一行都代表了一种色彩。•任一行的数字都指定了一个RGB值,即红、黄、蓝三种颜色的强度,形成一种特定的颜色。简单颜色映像表预定的颜色映象分别由十个MATLAB函数产生•上面所列的各个颜色映象产生一个64×3的矩阵,指定了64种颜色RGB的描述。•这些函数都接受一个参量来指定所产生矩阵的行数。比如hot(m)产生一个m×3的矩阵,它包含的RGB颜色值的范围从黑经过红、橘红和黄,到白。•大多数计算机在一个8位的硬件查色表中一次可以显示256种颜色,当然有些计算机的显示卡可以同时显示更多的颜色。•这就意味着在不同的图中,一般一次可以用三或四个64×3的颜色映象。如果使用了更多的颜色映象输入项,计算机必须经常在它的硬件查色表中调出输入项。比如,当在画MATLAB图形时背景图案发生了变化,就是发生了这种情况。•所以,除非计算机有一次显示更多种颜色的显示卡,最好任何一次所用的颜色映象输入项数都小于256。(2)颜色映象使用•语句colormap(M)将矩阵M作为当前图形窗口所用的颜色映象。•例如,colormap(cool)装入了一个有64个输入项的cool颜色映象。•colormapdefault装入了缺省的颜色映象(hsv)。•函数plot、plot3、contour(等高线图)和contour3不使用颜色映象,它们使用列在plot颜色和线形表中的颜色。而大多数其它绘图函数,比如mesh、surf、fill、pcolor和它们的各种变形函数,使用当前的颜色映象。•接受颜色参量的绘图函数中的颜色参量通常采用以下三种形式之一:•(1)字符串。代表plot颜色或线型表中的一种颜色,比如,’r‘代表红色;•(2)三个输入的行向量。它代表一个单独的RGB值,比如[.25.50.75];•(3)矩阵。如果颜色参量是一个矩阵,其元素作了调整,并把它们用作当前颜色映象的下标。最后一种形式会在以后作更多讨论。(3)颜色映象显示•可以用多种途径来显示一个颜色映象。其中一个方法是观察颜色映象矩阵的元素。•例如:hot(8)•ans=0.3333000.6667001.0000001.00000.333301.00000.666701.00001.000001.00001.00000.50001.00001.00001.0000上面的数据显示出第一行是1/3红色,而最后一行是白色。•另外,函数pcolor可以用来显示一个颜色映象。•n=16;•colormap(jet(n))•pcolor([1:n+1;1:n+1]’)•title(‘UsingPcolortoDisplayaColorMap’)•用伪彩色来显示颜色映象•因为上面这一段程序很有用处,它已经装入精通MATLAB工具箱中的函数mmshow中。•helpmmshow•MMSHOWPCOLORColormapDisplay•MMSHOWusespccolortodisplaythecurrentcolormap.•MMSHOW(MAP)displaysthecolormapMAP.•MMSHOW(MAP(N))displaysthecolormapMAPhavingNelements.•Examples:MMSHOW(hot)•MMSHOW(pink(30))•帮助信息:•MMSHOW显示PCOLOR颜色映象•MMSHOW使用pcolor来显示当前颜色映象•MMSHOW(MAP)显示MAP颜色映象•MMSHOW(MAP(N))显示一个有N个元素的MAP颜色映象•例子:MMSHOW(hot)•MMSHOW(pink(30))•函数mmshow取和colormap同样的输入参量,但在这种情况下它用自己的伪彩色显示而不是把颜色映象施加到当前图形。•另一种途径是使用MATLAB的函数rgbplot,它可以把颜色映象的各列分别画成红、绿和蓝色。例如rgbplot(hot)•图中显示红色分量首先增加,然后是绿色,最后是蓝色。•rgbplot(gray)表示所有三列数据均匀线性地增加(三条线重叠)。4、曲面/网线图的精细修饰(1)视角控制viewview([az,el])通过方位角、俯视角设置视点view([vx,vy,vz])通过直角坐标设置视点(2)色图colormapcolormap(CM)设置当前图形窗的着色色图为CM•MATLAB的预定义色图矩阵CMCM含义CM含义autumn红、黄浓淡色jet蓝头红尾饱和值色bone蓝色调浓淡色lines采用plot绘线色colorcube三浓淡多彩交错色pink淡粉红色图cool青、品红浓淡色prism光谱交错色copper纯铜色调线性浓淡色SPRING青、黄浓淡色flag红-白-蓝-黑交错色summer绿、黄浓淡色gray灰色调线性浓淡色winter蓝、绿浓淡色hot黑、红、黄、白浓淡色white全白色hsv两端为红的饱和值色注意:jet时默认色图。•函数colorbar在当前的图形窗口中增加水平或垂直的颜色标尺以显示当前坐标轴的颜色映象。•colorbar(‘horiz’)在当前的图形下面放一个水平的颜色条。•colorbar(‘vert’)在当前的图形右边放一个垂直的颜色条。•对无参量的colorbar,如果当前没有颜色条就加一个垂直的颜色条,或者更新现有的颜色条。•[x,y,z]=peaks;•mesh(x,y,z);•colormap(hsv)•axis([-33-33-68])•colorbar(3)浓淡处理shading•shadingoptions图形对象着色的浓淡处理•mesh、surf、pcolor、fill和fill3所创建的图形非数据点处的着色由shading指令决定。1.flat2.interpt3.faceted•shading是设置当前轴上“面”对象的Edgecolor和Facecolor属性的高层指令。【例5.3-3】三种浓淡处理方式比较。•clf•x=-4:4;y=x;•[X,Y]=meshgrid(x,y);•Z=X.^2+Y.^2;•surf(X,Y,Z)•colormap(jet)•subplot(1,3,1),surf(Z),axisoff•subplot(1,3,2),surf(Z),axisoff,shadingflat•subplot(1,3,3),surf(Z),axisoff,shadinginterp•set(gcf,'Color','w')(4)透明度控制alpha•alpha(v)对面、块、象三种图形对象的透明度加以控制;0-1之间,0为完全透明,1为不透明。•【例5.3-4】半透明的表面图。•clf•surf(peaks)•shadinginterp•alpha(0.5)•colormap(summer)(5)灯光设置light•light(‘color’,option1,‘style’,option2,‘position’,option3)灯光设置1.指令使用前后,原为强度相等的漫射光,后为面等子对象有关光的属性都被激活。2.该指令可以不包含任何宗量,采用默认设置:白光、无穷远、穿过[101]射向坐标原点。3.任何一个宗量都可以缺省;4.option1可以采用RGB三元组或相应的色彩字符;5.option2可以取’infinte’和‘local’分别表示无穷远光和近光。6.option3为直角坐标三元组形式,对远光,表示光线穿过该点射向原点;对近光,表示光源所在位置。(6)照明模式lighting•lightingoptions设置照明模式1.flat与faceted配合使用,默认格式,入射光均匀洒在图形对象的每个面上。2.gouraud先对顶点颜色插补,再对顶点勾画的面色进行插补,用于曲面表现;3.phong对顶点处法线差值,再计算各像素的反光。4.none使所有光源关闭。(7)控制光反射的材质指令material•materialopti