- MATLAB R2020a完全自学一本通
- 刘浩
- 2159字
- 2020-11-21 19:24:36
5.3 三维图形绘制
在实际的工程应用中,常常遇到三维甚至更多维的数据,需要在图形中表示出来,MATLAB平台提供了相应的三维图形的绘制功能。这些绘图功能与二维图形的绘制十分类似,特别是曲线的属性,例如线型、颜色等的设置,是完全相同的。
最常用的三维绘图有三维曲线图、三维网格图和三维曲面图这3种基本类型,相应的MATLAB指令分别为plot3、mesh和surf。
5.3.1 曲线图绘制
在已经学习了plot指令的基础上,在三维图形指令中,plot3指令十分易于理解,其调用格式也与plot指令类似,具体如下。
● plot3(X,Y,Z):当X、Y、Z为同维向量时,绘制以X、Y、Z为x、y、z坐标的三维曲线;当X、Y、Z为同维矩阵时,用X、Y、Z的对应列元素绘制x、y、z坐标的三维曲线,曲线的条数为矩阵的列数。
● plot3(X1,Y1,Z1,X2,Y2,Z2):绘制以X1、Y1、Z1和X2、Y2、Z2为x、y、z坐标的三维曲线。
● plot3(X,Y,Z,'PropertyName',PropertyValue,…):在PropertyName所规定的曲线属性下,绘制以X、Y、Z为x、y、z坐标的三维曲线。
● plot3(X1,Y1,Z1,'PropertyName1',PropertyValue1,X2,Y2,Z2,'PropertyName2',Property Value2):在PropertyName1所规定的曲线属性下,绘制以X1、Y1、Z1为x、y、z坐标的三维曲线;在PropertyName2所规定的曲线属性下,绘制以X2、Y2、Z2为x、y、z坐标的三维曲线。需要说明的是,plot3指令用来表现的是单参数的三维曲线,而非双参数的三维曲面。
例5-27:plot3指令使用示例。
创建M文件并命名为ex5_27.m,利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_84.jpg?sign=1739191830-vYPlicKFaVkcumUdxlD2s1FQWElTHqYK-0-69fdec61f679e6a1d2ffb199a2f35bfe)
运行M文件,结果如图5-29所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_85.jpg?sign=1739191830-GECRQZpD0qXA4F8bptj3PMhg0UbJTI7j-0-8545aaf59d3165f5d3a0391dbcc10d82)
图5-29 三维曲线运行结果
5.3.2 网格图绘制
三维网格图和曲面图的绘制比三维曲线图的绘制稍显复杂,主要是因为绘图数据的准备及三维图形的色彩、明暗、光照和视角等的处理。绘制函数z=f(x,y)的三维网格图的过程如下。
(1)确定自变量x和y的取值范围和取值间隔如下:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_86.jpg?sign=1739191830-zAPl7LdgxvIcDqPGKtMkA14P7reHuKsv-0-c68d211e67e275b1e95316d318e843ba)
(2)构成xoy平面上的自变量采样“格点”矩阵。
① 利用“格点”矩阵的原理生成矩阵。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_87.jpg?sign=1739191830-OZ2PH9EoT9OpzjOtSScy3PL6z8K9mxVd-0-5711aec2b4fbd7deb50ff03a83c5c093)
② 利用meshgrid指令生成“格点”矩阵。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_88.jpg?sign=1739191830-QINOkrkzVMP5cfPXhIfGva4RiIhJWvxM-0-08810c2a13ef501d2a7ea2c9ca4ba155)
(3)计算在自变量采样“格点”上的函数值:z=f(x,y)。
绘制网格图的基本mesh指令的调用格式如下。
● mesh(X,Y,Z):以X为x轴自变量、Y为y轴自变量,绘制网格图;X、Y均为向量,若X、Y长度分别为m、n,则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-28:mesh指令使用示例。
创建M文件并命名为3dmesh.m(同时存为ex5_28.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_89.jpg?sign=1739191830-JWImkG6VSSjx50nqUZ0sPrZ7GID858Y5-0-bf4b70238bf85c600ce2fb9232a490d1)
运行M文件,结果如图5-30所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_90.jpg?sign=1739191830-hDFCgbgdRF73ByKBz07kTZavKKVwjliN-0-7784545a5e3b10be48a465b83e15dc1b)
图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-29:surf指令与mesh指令对比示例。
创建M文件并命名为surfxyz.m(同时存为ex5_29.m),利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_91.jpg?sign=1739191830-iQ3dKAVSAsTQNW6KUHLyxxcp2zk8KAKT-0-4d93e317e7cc912e190b29c47eb9933b)
运行M文件,结果如图5-31所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_92.jpg?sign=1739191830-8A6rRXDJyi5mCVOovvUufOKcCAxaUBEH-0-76c34a475d889a3122ea0f011f06b8c8)
图5-31 surfxyz.m运行结果
5.3.4 光照模型
光照是一种利用方向光源照亮物体的技术。在某些情况下,这项技术能使表面微妙的差异更容易看到。光照也能用来对三维的图像增加现实感。
例5-30:带光照的曲面图示例。
创建M文件并命名为ex5_30.m,利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_93.jpg?sign=1739191830-kQvLFE5mfXvuytRbTUl9jCGt8xylNUyS-0-9ed42c00dc198a32e412055e6eab90f0)
运行M文件,结果如图5-32所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_94.jpg?sign=1739191830-oHPloyTbAYV0XWTThJ5OYEwh4syJEKC9-0-6d89e3531c553d2722c2e15a8aa14918)
图5-32 带光照的曲面图
本例中将曲面涂上了红色,并且将surf指令所定义的网格线移除。同时,一个发光的物体被加到了“镜头”的左边(从空间观看时所在表面的位置)。
增加光源和设置好照明方式到phong后,使用view命令去改变视角,从空间的另一个不同的点再观看表面(方位角-15°和仰角65°)。最后,用工具栏缩放方式放大外观。
基于运用漫射、镜面反光和环境照明模型,MATLAB中还内置了surfl函数,可以画出类似于函数surf产生的带彩色的曲面。使用一个单色颜色映像(如灰色、纯白、铜黄或粉红色)和插值色彩,会画出效果更好的曲面。其调用格式如下。
● surfl(X,Y,Z,S):其中S以[Sx,Sy,Sz]或[az,el]的形式定义光源方向。在没有明确定义的情况下,其默认光源是逆时针45°。
例5-31:surfl指令应用示例。
创建M文件并命名为ex5_31.m,利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_95.jpg?sign=1739191830-jubiNMyNlOTXuScIW6EObXra6AYzBKiG-0-259e01282fe3d86c86418c1a68d1869c)
运行M文件,结果如图5-33所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_96.jpg?sign=1739191830-DAb9YYowVcZQ9gz1nRZoKCyMBKs5B3Lx-0-9b4b217d7e2afde6b25d72ddd0a67521)
图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长度分别为m、n,则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-32:contour指令使用示例。
创建M文件并命名为ex5_32.m,利用M文件编辑器在M文件中输入:
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_97.jpg?sign=1739191830-V8fo8vsH2M6i69SVL7OgJhS7UoCtv9dP-0-4c04df7501c66912d22535445f505361)
运行M文件,结果如图5-34所示。
![img](https://epubservercos.yuewen.com/C258E9/18519308401625406/epubprivate/OEBPS/Images/txt007_98.jpg?sign=1739191830-nL4XJFXyKAntTkqYCLMmWRoIfSjz6Z73-0-44bbac8d545d0c134ddce46b28415e8a)
图5-34 contour指令运行结果