3.4.2 三维曲面图
函数mesh和surf用来绘制三维曲面图.三维曲面方程应有x、y两个自变量,在绘制曲面图形时,应先在x-y平面上建立网格坐标,每个网格坐标点上的数据z坐标就定义了曲面上的点.通过直线(mesh)或小平面(surf)连接相邻的点就构成了三维曲面.
建立网格坐标可以利用meshgrid函数生成,具体用法如下:
x=a:dx:b;
y=c:dy:d;
[X,Y]=meshgrid(x,y);
矩阵X的每一行都是向量x,行数等于向量y元素的个数;矩阵Y的每一列都是向量y,列数等于向量x的元素的个数.这样X和Y相同位置上的元素构成网格点的坐标.
为了清楚地知道网格点的个数,也会用如下形式:
x=linspace(a,b,n);
y=linspace(c,d,m);
[X,Y]=meshgrid(x,y);
注意,当x=y时,meshgrid函数可写成meshgrid(x).
mesh函数和surf函数的调用格式为
其中,X、Y是网格坐标矩阵;Z是网格点上的高度矩阵.
例3.18 绘制三维曲面z=sin y cos x.
解:为了比较mesh函数、surf函数和plot3函数的区别,下面给出3个不同的程序,绘制出不同形式的曲面.
程序1:
程序2:
程序3:
程序执行结果分别如图3-20、图3-21和图3-22所示.
图3-20 用mesh函数绘制的三维网格图
图3-21 用surf函数绘制的三维曲面图
图3-22 用plot3函数绘制的三维曲线图
另外,还有两个与mesh函数相似的函数:带有等高线的三维网格曲面函数meshc和带有底座的三维网格曲面函数meshz.meshc函数和meshz函数的用法与mesh函数的类似,不同的是,meshc函数在xy平面上多一个曲面的等高线,meshz函数在xy平面上多一个曲面的底座.
同样,有两个与surf函数相似的函数:带有等高线的surfc函数和具有光照效果的surfl函数,用法和surf相似.
例3.19 在xy平面内选择区域[-8,8]×[-8,8]绘制带有等高线和底座的三维网格曲面,以及带有等高线和光照效果的三维曲面图,函数为z=,这里
.
解:程序如下:
程序运行结果如图3-23所示.
图3-23 分别用meshc函数、meshz函数、surfc函数和surfl函数绘制的图形
MATLAB还提供了一些特殊函数用来绘制标准的三维曲面.如sphere函数用来绘制三维球面,cylinder函数用来绘制柱面.peaks函数是多峰函数,常用于三维曲面的演示.多峰函数的数学表达式是:
sphere函数的调用格式是:
[x,y,z]=sphere(n)
其中,n是网格数,默认值是20.该函数产生(n+1)×(n+1)矩阵x、y、z,绘制原点为圆心、半径为1的单位球体.
cylinder函数的调用格式是:
[x,y,z]=cylinder(R,n)
其中,R是半径,表示柱面上的点到中心轴的距离;n表示以R为半径的圆周上有n个间隔点,默认值是20.如cylinder(3)生成一个半径为3的圆柱,cylinder([10,0])是圆锥,而当R是由某连续函数生成的数据时,绘制出的柱面的侧面曲线为这个连续函数.
peaks函数的调用格式是:
[x,y,z]=peaks(n)
其中,n表示矩阵的行数和列数;x和y在矩形[-3,3]×[-3,3]中等距分割,分别沿x和y方向将区间分成n-1份,并计算这些网格点上的函数值.n的默认值是49.
例3.20 绘制3个三维曲面图形:半径为4的球面、边界为正弦曲线y=2+sin x,x∈[0,2π]的柱面和多峰函数.
解:程序如下:
程序运行结果如图3-24所示.