三维图形
在日常的工程计算中将结果表示为三维图形也是屡见不鲜的,为此,MATLAB语言提供了相应的三维图形的绘制功能。MATLAB语言中三维图形的绘制与二维图形的绘制在许多方面都很类似,其中曲线的属性设置则完全相同。
一、基本绘图命令
三维图形绘制中经常用到的基本绘图命令有函数plot3、网图函数及着色函数等。
1.plot3函数
函数plot3是函数plot的三维扩展。其常用的调用格式有如下几种,与plot相比,只是增加了一个维数而已。
- plot3(x,y,z):其中x、y和z为3个相同维数的向量。函数绘出这些向量所表示的点的曲线。
- plot3(X,Y,Z):其中X、Y和Z为3个相同阶数的矩阵,函数绘出3矩阵的列向量的曲线。
若要定义不同线型,可使用以下格式。
- plot3(X,Y,Z,s):其中s为定义线型的字符串,形式同plot函数。
- plot3(x1,y1,z1,s1,x2,y2,z2,s2,x3,y3,z3,s3,…):这是组合绘图调用格式,与plot相同。
【例1】绘制如图1所示的三维螺旋线。
x=0:pi/50:10 * pi; y=sin(x); z=cos(x); plot3(x, y, z);
说明:与plot相似,plot3也可以用矩阵作为输入参数。这时,要求3个输入矩阵必须是同阶数的。
【例2】绘制参数为矩阵的三维图,如图2所示。
[x,y]=meshgrid(-2:0.1:2,-2:0.1:2); z=x.*exp(-x.^2-y.^2); plot3(x, y, z)
2.网图函数
上例中应用到了函数meshgrid,该函数为网图函数的一种,MATLAB语言中提供了一系列的网图函数,如表1所示。
表1 MATLAB 语言中的网图函数
函数名 |
说明 |
mesh |
三维网格图 |
meshc |
将网格与等高线结合 |
meshz |
屏蔽的网格图 |
meshgrid |
生成网格点 |
MATLAB语言对于网格的处理方法是,将xy平面按指定方式分隔成平面网格,然后根据程序中给定的方式计算第三维变量的值,即z轴的值,与对应的xy平面的坐标构成三维点元素,根据由此得到的(x,z)和(y,z)计算各平面的曲线,彼此相连就构成了网格图。
函数meshgrid是网图函数中最简单的一个,其作用是将给定的区域按一定的方式划分成平面网格,该平面网格可以用来绘制三维曲面,具体调用格式如下。
- [X,Y]=meshgrid(x,y):这里的x和y为给定的向量,一方面可以用来定义网格划分区域,另一方面也可用来定义网格划分方法。矩阵X和Y则是网格划分后的数据矩阵。
函数mesh用来绘制三维的网图,具体调用格式如下。
- mesh(X,Y,Z,C):绘制4个矩阵变量的彩色网格面图形。观测点可由函数view定义,坐标轴可由函数axis定义,颜色由C设置,也可由函数colormap实现。
- mesh(X,Y,Z):使用C=Z,即颜色正比于图高。
mesh(x,y,z)和mesh(x,y,Z,C)此处使用两个向量代替两个矩阵,同时要求length(x)=n,length(y)=m且[m,n]=size(Z)。在这种情况下,网格线的顶点为(x(j),y(i),Z(i, j))的3倍。
注意:x对应于Z的列,而y对应于Z的行。mesh(Z)和 mesh(Z,C)使用x=1:n及y=1:m。在此情况下,高度Z为单值函数。
【例3】使用mesh函数绘制三维面图,如图3所示。
x=-8:0.5:8; y=x'; a=ones(size(y)) * x; b=y * ones(size(x) ); c=sqrt(a.^2+b.^2)+eps; z=sin(c)./c; mesh(z)
mesh函数的第3个输入参数将设置生成图中的颜色,MATLAB允许用户增加一个输入变量专门设置面图色彩。当mesh函数仅有一个输入变量时,将以输入矩阵的下标生成平面网格系,并由此生成三维面图。
【例4】使用mesh函数绘制Hilbert矩阵三维面图,如图4所示。
Z=hilb(10); mesh(Z)
函数meshc与函数mesh的调用方式相同,只是该函数在mesh的作用之上又增加了contour函数的功能,即绘制相应的等高线。下面来看一个meshc函数的示例。
【例5】使用meshc函数绘制的三维面图,如图5所示。
[X,Y]=meshgrid(-4:0.5:4); Z=sqrt(X.^2+Y.^2); meshc(Z)
函数meshz与函数mesh的调用方式也相同,不同的是该函数在mesh函数的作用之上增加了屏蔽作用,即增加了边界面屏蔽。
【例6】使用meshz函数绘制的三维面图,如图6所示。
[X, Y]=meshgrid(-4:0.5:4); Z=sqrt(X.^2+Y.^2); meshz(Z)
3.着色函数
绘制着色图的函数surf也是MATLAB语言中较为常用的三维图形函数,其常用的调用格式如下。
- surf(X,Y,Z,C)
输入参数的设置与函数mesh相同,不同的是mesh函数绘制的图形是一网格图,而surf函数绘制的图形是着色的三维表面。MATLAB语言对表面进行着色的方法是,在得到相应的网格后,对每一网格依据该网格所代表的节点的色值(由变量C控制),来定义这一网格的颜色。
【例7】绘制如图7所示的三维着色面图。
[X, Y]=meshgrid(-4:0.5:4); Z=sqrt(X.^2+Y.^2); surf(Z)
二、特殊的三维图形函数
MATLAB语言还提供了不少特殊的三维图形函数,能够绘制各种类型的三维图。常见的特殊三维图形函数如表2所示。
表2 MATLAB语言中的特殊三维图形函数
函数名 |
说明 |
函数名 |
说明 |
bar3 |
三维条形图 |
surfc |
着色图与等高线图结合 |
comet3 |
三维彗星轨迹图 |
trisurf |
三角形表面图 |
ezgraph3 |
函数控制绘制三维图 |
trimesh |
三角形网格图 |
pie3 |
三维饼状图 |
waterfall |
瀑布图 |
scatter3 |
三维散射图 |
cylinder |
柱面图 |
stem3 |
三维离散数据图 |
sphere |
球面图 |
这里仅对几个较为常用的函数进行示例说明,不进行详细的解释。
【例8】绘制如图8所示的三维饼状图。
x=[2,4,6,8]; pie3(x,[0,0,1,0]) %如图8所示
【例9】绘制如图9所示的着色图与等高线图。
[X, Y]=meshgrid(-4:0.5:4); Z=sqrt(X.^2+Y.^2); surfc(X, Y, Z) %如图9所示
与二维图形部分的等高线函数contour相类似,三维图形绘制函数中也有相应的等高线函数contour3,其常用的调用格式与函数contour相同。下面介绍三维等高线函数的示例。
【例10】绘制如图10所示的三维等高线图形。
[X, Y]=meshgrid(-4:0.5:4); contour3(peaks(X, Y), 25)
这里详细介绍一下两个三维旋转体的绘制函数cylinder和sphere。
柱面图由函数cylinder绘制,其调用格式如下。
- [X,Y,Z]=cylinder(R,N):此函数以母线向量R生成单位柱面。母线向量R是在单位高度里等分刻度上定义的半径向量。N为旋转圆周上的分格线的条数。用surf(X,Y,Z)来显示此柱面。
- [X,Y,Z]=cylinder(R)或[X,Y,Z]=cylinder:此形式为默认N=20且R=[1 1]。
【例11】绘制如图11所示的柱面图。
x=0:pi/20:pi * 3; r=5+cos(x); [a,b,c]=cylinder(r,30); mesh(a,b,c)
球面图由函数sphere来绘制,其常用的调用格式如下。
- [X,Y,Z]=sphere(n):此函数生成3个(n+1)×(n+1)阶的矩阵,利用函数surf(X,Y,Z)可产生单位球面。
- [X,Y,Z]=sphere:此形式使用了默认值n=20。
- sphere(n):只绘制球面图而不返回任何值。
【例12】绘制如图12所示的地球表面的气温分布示意图。
[a, b, c]=sphere(40); t=abs(c); urf(a, b, c, t);axis('equal') %这两句为了将坐标轴的刻度控制为相同的 axis('square'); colormap('hot');文件下载(已下载 6393 次)
发布时间:2017/12/4 上午10:10:24 阅读次数:5300