MATLAB R2020a完全自学一本通
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

5.3 三维图形绘制

在实际的工程应用中,常常遇到三维甚至更多维的数据,需要在图形中表示出来,MATLAB平台提供了相应的三维图形的绘制功能。这些绘图功能与二维图形的绘制十分类似,特别是曲线的属性,例如线型、颜色等的设置,是完全相同的。

最常用的三维绘图有三维曲线图、三维网格图和三维曲面图这3种基本类型,相应的MATLAB指令分别为plot3、mesh和surf。

5.3.1 曲线图绘制

在已经学习了plot指令的基础上,在三维图形指令中,plot3指令十分易于理解,其调用格式也与plot指令类似,具体如下。

● plot3(X,Y,Z):当X、Y、Z为同维向量时,绘制以X、Y、Z为xyz坐标的三维曲线;当X、Y、Z为同维矩阵时,用X、Y、Z的对应列元素绘制xyz坐标的三维曲线,曲线的条数为矩阵的列数。

● plot3(X1,Y1,Z1,X2,Y2,Z2):绘制以X1、Y1、Z1和X2、Y2、Z2为xyz坐标的三维曲线。

● plot3(X,Y,Z,'PropertyName',PropertyValue,…):在PropertyName所规定的曲线属性下,绘制以X、Y、Z为xyz坐标的三维曲线。

● plot3(X1,Y1,Z1,'PropertyName1',PropertyValue1,X2,Y2,Z2,'PropertyName2',Property Value2):在PropertyName1所规定的曲线属性下,绘制以X1、Y1、Z1为xyz坐标的三维曲线;在PropertyName2所规定的曲线属性下,绘制以X2、Y2、Z2为xyz坐标的三维曲线。需要说明的是,plot3指令用来表现的是单参数的三维曲线,而非双参数的三维曲面。

5-27plot3指令使用示例。

创建M文件并命名为ex5_27.m,利用M文件编辑器在M文件中输入:

img

运行M文件,结果如图5-29所示。

img

图5-29 三维曲线运行结果

5.3.2 网格图绘制

三维网格图和曲面图的绘制比三维曲线图的绘制稍显复杂,主要是因为绘图数据的准备及三维图形的色彩、明暗、光照和视角等的处理。绘制函数z=f(x,y)的三维网格图的过程如下。

(1)确定自变量xy的取值范围和取值间隔如下:

img

(2)构成xoy平面上的自变量采样“格点”矩阵。

① 利用“格点”矩阵的原理生成矩阵。

img

② 利用meshgrid指令生成“格点”矩阵。

img

(3)计算在自变量采样“格点”上的函数值:z=f(x,y)。

绘制网格图的基本mesh指令的调用格式如下。

● mesh(X,Y,Z):以X为x轴自变量、Y为y轴自变量,绘制网格图;X、Y均为向量,若X、Y长度分别为mn,则Z为m×n的矩阵,即[m,n]=size(Z),则网格线的顶点为(Xj,Yi,Zij)。

● mesh(Z):以Z矩阵列下标为x轴自变量、行下标为y轴自变量,绘制网格图。

● mesh(X,Y,Z,C):以X为x轴自变量、Y为y轴自变量,绘制网格图;其中C用于定义颜色,如果不定义C,则成为mesh(X,Y,Z),其绘制的网格图的颜色随着Z值的变化(曲面高度)而变化。

● mesh(X,Y,Z,'PropertyName ',PropertyValue,…):以X为x轴自变量、Y为y轴自变量,绘制网格图;PropertyValue用来定义网格图的标记等属性。

5-28mesh指令使用示例。

创建M文件并命名为3dmesh.m(同时存为ex5_28.m),利用M文件编辑器在M文件中输入:

img

运行M文件,结果如图5-30所示。

img

图5-30 3dmesh.m文件运行结果

5.3.3 曲面图绘制

曲面图的绘制由surf指令完成,该指令的调用格式与mesh指令类似,具体如下。

● surf(X,Y,Z)。

● surf(Z)。

● surf(X,Y,Z,C)。

● surf(X,Y,Z,'PropertyName',PropertyValue,…)。

mesh指令所绘制的图形是网格划分的曲面图,而surf指令绘制得到的是平滑着色的三维曲面图,着色的方式是在得到相应的网格点后,对每一个网格依据该网格所代表的节点的色值(由变量C控制)来定义这一网格的颜色。

5-29surf指令与mesh指令对比示例。

创建M文件并命名为surfxyz.m(同时存为ex5_29.m),利用M文件编辑器在M文件中输入:

img

运行M文件,结果如图5-31所示。

img

图5-31 surfxyz.m运行结果

5.3.4 光照模型

光照是一种利用方向光源照亮物体的技术。在某些情况下,这项技术能使表面微妙的差异更容易看到。光照也能用来对三维的图像增加现实感。

5-30带光照的曲面图示例。

创建M文件并命名为ex5_30.m,利用M文件编辑器在M文件中输入:

img

运行M文件,结果如图5-32所示。

img

图5-32 带光照的曲面图

本例中将曲面涂上了红色,并且将surf指令所定义的网格线移除。同时,一个发光的物体被加到了“镜头”的左边(从空间观看时所在表面的位置)。

增加光源和设置好照明方式到phong后,使用view命令去改变视角,从空间的另一个不同的点再观看表面(方位角-15°和仰角65°)。最后,用工具栏缩放方式放大外观。

基于运用漫射、镜面反光和环境照明模型,MATLAB中还内置了surfl函数,可以画出类似于函数surf产生的带彩色的曲面。使用一个单色颜色映像(如灰色、纯白、铜黄或粉红色)和插值色彩,会画出效果更好的曲面。其调用格式如下。

● surfl(X,Y,Z,S):其中S以[Sx,Sy,Sz]或[az,el]的形式定义光源方向。在没有明确定义的情况下,其默认光源是逆时针45°。

5-31surfl指令应用示例。

创建M文件并命名为ex5_31.m,利用M文件编辑器在M文件中输入:

img

运行M文件,结果如图5-33所示。

img

图5-33 surfl指令运行结果

值得注意的是,插值上色会极大地降低打印速度。这是因为每一像素都有一个不同的颜色值,打印机对每个点都要分别上色。

5.3.5 绘制等值线图

等值线图又叫等高线图。绘制等值线图需要用到contour指令,其调用格式如下。

● contour(Z):以Z矩阵列下标为x轴自变量、行下标为y轴自变量,绘制等值线图。

● contour(Z,n):其中n为所绘制的图形等值线的条数。

● contour(Z,v):其中v为向量,向量的长度为等值线的条数,并且等值线的值为对应的向量的元素值。

● contour(X,Y,Z):以X为x轴自变量、Y为y轴自变量,绘制等值线图;X、Y均为向量,若X、Y长度分别为mn,则Z为m×n的矩阵,即[m,n]=size(Z),则网格线的顶点为(Xj,Yi,Zij)。

● contour(X,Y,Z,n):其中n为所绘制的图形等值线的条数。

● contour(X,Y,Z,v):其中v为向量,向量的长度为等值线的条数,并且等值线的值为对应的向量的元素值。

● surf(…,LineSpec):其中LineSpec用来定义等值线的线型。

与contour作用相类似的指令还有contourf指令,其调用格式与contour指令相同。

5-32contour指令使用示例。

创建M文件并命名为ex5_32.m,利用M文件编辑器在M文件中输入:

img

运行M文件,结果如图5-34所示。

img

图5-34 contour指令运行结果