5.3 三维图形
MATLAB提供了三维图形的绘制功能,最常用的三维图形有三维曲线图、三维网格图和三维曲面图这三种基本类型,相应的命令分别为plot3、mesh和surf。本节将介绍这些图形的绘制方式。
5.3.1 曲线图
MATLAB提供的三维曲线图的绘图命令为plot3。该函数的用法和plot函数基本一样,但需要输入的数据比plot多。该函数常用的调用形式如下:
plot3(X1, Y1, Z1, ...) plot3(X1, Y1, Z1, LineSpec, ...)
其中,X1, Y1, Z1为向量或矩阵,LineSpec用于定义曲线线型、颜色和标识等。
当X1、Y1、Z1为长度相同的向量时,plot3命令将绘得一条分别以向量X1、Y1、Z1为x、y、z轴坐标值的空间曲线。
当X1、Y1、Z1均为m×n的矩阵时,plot3命令将绘得m条曲线。其第i条空间曲线分别以X1、Y1、Z1矩阵的第i列分量为x、y、z轴坐标值的空间曲线。
例5-13,三维曲线图绘制示例。
在命令行窗口输入:
x1= cos((1:100)/25*pi*2); x2= sin((1:100)/25*pi*2); x3=[x1', x2']; y1=(1:100)/100.*sin((1:100)/25*pi*2); y2=cos((1:100)/25*pi*2); y3=[y1', y2']; z1=0.01:0.01:1; z2=0.005:0.005:0.5; z3=[z1', z2']; whos subplot(221); plot3(x1, y1, z1) %绘制y1,见图5.13左上图 subplot(222); plot3(x2, y2, z2) %绘制y2,见图5.13右上图 subplot(223); plot3(x3, y3, z3) %绘制y3,见图5.13左下图 subplot(224); plot3(x1, y1, z1, x2, y2, z2, 0.5*x3, y3, z3) %绘制y4,见图5.13右下图
输出结果如下:
Name Size Bytes Class Attributes x1 1x100 800 double x2 1x100 800 double x3 100x2 1600 double y1 1x100 800 double y2 1x100 800 double y3 100x2 1600 double z1 1x100 800 double z2 1x100 800 double z3 100x2 1600 double
得到的图形如图5.13所示。
图5.13 三维曲线图绘制示例
5.3.2 网格图
MATLAB提供的三维网格图的绘图命令为mesh。该函数常用的调用格式如下:
mesh(X, Y, Z) mesh(Z) mesh(..., C)
其中,X和Y必须均为向量,若X和Y的长度分别为m和n,则Z必须为m×n的矩阵;C用于定义颜色,如果没有定义C,则mesh(X, Y, Z)绘制的颜色随Z值(即曲面高度)成比例变化。在提供X、Y的情况下,网格线的顶点为(X(j), Y(i), Z(i, j));如果没有提供X、Y,则将索引(i, j)作为Z(i、j)的X、Y轴坐标值。
三维网格图的绘制比三维曲线图的绘制稍显复杂,主要是因为绘图数据的准备以及三维图形的色彩的处理。绘制函数z=f(x, y)的三维网格图的过程如下。
(1)确定自变量x和y的取值范围和取值间隔如下。
x=x1:dx:x2 y=y1:dy:y2
(2)构成xoy平面上的自变量采样点矩阵。
● 利用格点矩阵的原理生成矩阵。
x=x1:dx:x2; y=y1:dy:y2; X=ones(size(y))*x; Y=y*ones(size(x));
● 利用meshgrid命令生成格点矩阵。
x=x1:dx:x2; y=y1:dy:y2; [X, Y]=meshgrid(x, y);
(3)计算在自变量采样“格点”上的函数值:Z=f(X, Y)。
例5-14,三维网格图绘制示例。
在命令行窗口输入:
[X, Y] = meshgrid(-8:.5:8); R = sqrt(X.^2 + Y.^2) + eps; Z = sin(R)./R; C = gradient(Z); subplot(131); mesh(Z); %见图5.14左图 subplot(132); mesh(X, Y, Z); axis([-8 8-8 8-0.5 1]) %见图5.14中图 subplot(133); mesh(X, Y, Z, C); axis([-8 8-8 8-0.5 1]) %见图5.14右图
命令行窗口无输出。得到的图形如图5.14所示。
图5.14 三维网格图绘制示例
5.3.3 曲面图
MATLAB提供的三维曲面图的绘图命令为surf。该函数常用的调用格式如下:
surf(Z) surf(Z, C) surf(X, Y, Z) surf(X, Y, Z, C)
相关的参数和操作方法可以参考mesh命令。
surf与mesh命令不同的是:mesh命令所绘制的图形是网格划分的曲面图,而surf命令绘制得到的是平滑着色的三维曲面图,着色的方式是在得到相应的网格点后,对每一个网格根据该网格所代表的节点的色值(由变量C控制)来定义这一网格的颜色。
例5-15,三维曲面图绘制示例。
在命令行窗口输入:
[X, Y] = meshgrid(-8:.5:8); R = sqrt(X.^2 + Y.^2) + eps; Z = sin(R)./R; C = gradient(Z); subplot(221); surf (Z); %见图5.15左上图 subplot(222); surf (Z, C); %见图5.15右上图 subplot(223); surf (X, Y, Z); axis([-8 8-8 8-0.5 1]) %见图5.15左下图 subplot(224); surf (X, Y, Z, C); axis([-8 8-8 8-0.5 1]) %见图5.15右下图
命令行窗口无输出。得到的图形如图5.15所示。
图5.15 三维曲面图绘制示例