MATLAB surf()绘制三维曲面图详解(附带实例)
在 MATLAB 中,利用 surf() 函数可以绘制三维曲面图,其调用格式如下:
在 MATLAB 中,还可以利用 surfc()、surfl() 等函数绘制三维曲面图,利用 mesh() 等函数绘制网格曲面图,曲面绘图函数如下表所示:
这些函数的调用格式与 surf() 函数的基本相同。
【实例 1】绘制球体的三维图形。在编辑器中编写以下程序并运行。

图 1 球体的三维图形
由图 1 可以看到,球面被网格线分割成小块;每一小块可看作一块补片,嵌在线条之间。这些线条和渐变颜色可以由 shading 命令指定,其格式如下:

图 2 不同颜色分布方式下球体的三维图形
【实例 2】绘制具有亮度(光照效果)的曲面图。在编辑器中编写以下程序并运行。

图 3 具有亮度(光照效果)的曲面图
【实例 3】显示曲面图下方的等高线图。在编辑器中编写以下程序并运行。

图 4 曲面图下方的等高线图
【实例 4】绘制网格曲面图。在编辑器中编写以下程序并运行。

图 5 网格曲面图
【实例 5】绘制带帷幕的网格曲面图。在编辑器中编写以下程序并运行。

图 6 带帷幕的网格曲面图
【实例 6】绘制网格曲面图示例。在编辑器中编写以下程序并运行。

图 7 不同类型的网格曲面图
surf(X,Y,Z) % 创建一个三维曲面图,即一个具有实色边和实色面的三维曲面 surf(X,Y,Z,C) % 指定曲面的颜色 % 函数将矩阵Z中的值绘制为由X和Y决定的x-y平面中的网格上方的高度。曲面的颜色根据Z指定的高度而变化 surf(Z) % 创建一个曲面图,并将Z中元素的列索引和行索引用作x坐标和y坐标 surf(Z,C) % 指定曲面的颜色 surf(__,Name,Value) % 使用一个或多个名称-值对指定曲面属性
在 MATLAB 中,还可以利用 surfc()、surfl() 等函数绘制三维曲面图,利用 mesh() 等函数绘制网格曲面图,曲面绘图函数如下表所示:
函数 | 功能 | 函数 | 功能 |
---|---|---|---|
surfc() | 绘制曲面图及其下方的等高线图 | mesh() | 绘制网格曲面图 |
surfl() | 绘制具有基于颜色图的光照效果的曲面图 | meshc() | 绘制网格曲面图及其下方的等高线图 |
surface() | 绘制基本曲面图 | meshz() | 绘制带帷幕的网格曲面图 |
surfnorm() | 创建一个三维曲面图并显示其法线 |
这些函数的调用格式与 surf() 函数的基本相同。
【实例 1】绘制球体的三维图形。在编辑器中编写以下程序并运行。
figure [X,Y,Z]=sphere(30); % 计算球体的三维坐标 surf(X,Y,Z); % 绘制球体的三维图形 xlabel('x'), ylabel('y'), zlabel('z'); title('sphere');运行程序后,输出如下图所示的图形:

图 1 球体的三维图形
由图 1 可以看到,球面被网格线分割成小块;每一小块可看作一块补片,嵌在线条之间。这些线条和渐变颜色可以由 shading 命令指定,其格式如下:
shading faceted % 在绘制曲面时采用分层网格线,为默认值 shading flat % 表示平滑式颜色分布方式;去掉黑色线条,补片保持单一颜色 shading interp % 表示插补式颜色分布方式;同样去掉线条,但补片以插值加色,计算量大对刚绘制的曲面分别执行 shading flat和shading interp 命令,显示效果如下图所示。

图 2 不同颜色分布方式下球体的三维图形
【实例 2】绘制具有亮度(光照效果)的曲面图。在编辑器中编写以下程序并运行。
[x,y]=meshgrid(-3:0.1:3); z=peaks(x,y); surfl(x,y,z); shading interp colormap(sky) axis([-4 4 -4 4 -8 10]);运行程序后,输出如下图所示的图形。

图 3 具有亮度(光照效果)的曲面图
【实例 3】显示曲面图下方的等高线图。在编辑器中编写以下程序并运行。
[X,Y]=meshgrid(1:0.2:10,1:0.2:20); Z=sin(X)+cos(Y); colormap(sky) surfc(X,Y,Z)运行程序后,输出如下图所示的图形:

图 4 曲面图下方的等高线图
【实例 4】绘制网格曲面图。在编辑器中编写以下程序并运行。
colormap('default') [X,Y]=meshgrid(-8:.5:8); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; C=X.*Y; mesh(X,Y,Z,C) colorbar运行程序后,输出如下图所示的图形。

图 5 网格曲面图
【实例 5】绘制带帷幕的网格曲面图。在编辑器中编写以下程序并运行。
[X,Y]=meshgrid(-3:.125:3); Z=peaks(X,Y); C=gradient(Z); meshz(X,Y,Z,C) colorbar运行程序后,输出如下图所示的图形。

图 6 带帷幕的网格曲面图
【实例 6】绘制网格曲面图示例。在编辑器中编写以下程序并运行。
[X,Y,Z]=peaks(20); figure subplot(2,2,1); mesh(X,Y,Z); title('(a) mesh of peaks') subplot(2,2,2); surf(X,Y,Z); title('(b) surf of peaks') subplot(2,2,3); meshc(X,Y,Z); title('(c) meshc of peaks') subplot(2,2,4); meshz(X,Y,Z); title('(d) meshz of peaks')运行程序后,输出如下图所示图形。

图 7 不同类型的网格曲面图