三维图形

在日常的工程计算中将结果表示为三维图形也是屡见不鲜的,为此,MATLAB语言提供了相应的三维图形的绘制功能。MATLAB语言中三维图形的绘制与二维图形的绘制在许多方面都很类似,其中曲线的属性设置则完全相同。

一、基本绘图命令

三维图形绘制中经常用到的基本绘图命令有函数plot3、网图函数及着色函数等。

1.plot3函数

函数plot3是函数plot的三维扩展。其常用的调用格式有如下几种,与plot相比,只是增加了一个维数而已。

若要定义不同线型,可使用以下格式。

【例1】绘制如图1所示的三维螺旋线。

图1 plot3绘制的三维螺旋线
x=0:pi/50:10 * pi;
y=sin(x);
z=cos(x);
plot3(x, y, z);

说明:与plot相似,plot3也可以用矩阵作为输入参数。这时,要求3个输入矩阵必须是同阶数的。

【例2】绘制参数为矩阵的三维图,如图2所示。

图2 plot3绘制的三维图形(输入参数为矩阵)
[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是网图函数中最简单的一个,其作用是将给定的区域按一定的方式划分成平面网格,该平面网格可以用来绘制三维曲面,具体调用格式如下。

函数mesh用来绘制三维的网图,具体调用格式如下。

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所示。

图3 mesh函数生成三维面图
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所示。

图4 mesh函数生成的Hilbert矩阵三维面图
Z=hilb(10);
mesh(Z)

函数meshc与函数mesh的调用方式相同,只是该函数在mesh的作用之上又增加了contour函数的功能,即绘制相应的等高线。下面来看一个meshc函数的示例。

【例5】使用meshc函数绘制的三维面图,如图5所示。

图5 meshc函数绘制的三维面图
[X,Y]=meshgrid(-4:0.5:4);
Z=sqrt(X.^2+Y.^2);
meshc(Z)

函数meshz与函数mesh的调用方式也相同,不同的是该函数在mesh函数的作用之上增加了屏蔽作用,即增加了边界面屏蔽。

【例6】使用meshz函数绘制的三维面图,如图6所示。

图6 meshz函数绘制的三维面图
[X, Y]=meshgrid(-4:0.5:4);
Z=sqrt(X.^2+Y.^2);
meshz(Z)

3.着色函数

绘制着色图的函数surf也是MATLAB语言中较为常用的三维图形函数,其常用的调用格式如下。

输入参数的设置与函数mesh相同,不同的是mesh函数绘制的图形是一网格图,而surf函数绘制的图形是着色的三维表面。MATLAB语言对表面进行着色的方法是,在得到相应的网格后,对每一网格依据该网格所代表的节点的色值(由变量C控制),来定义这一网格的颜色。

【例7】绘制如图7所示的三维着色面图。

图7 surf绘制的三维着色面图示意图
[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所示的三维饼状图。

图8 三维饼状图示意图
x=[2,4,6,8];
pie3(x,[0,0,1,0]) %如图8所示

【例9】绘制如图9所示的着色图与等高线图。

图9 函数surfc绘图示意图
[X, Y]=meshgrid(-4:0.5:4);
Z=sqrt(X.^2+Y.^2);
surfc(X, Y, Z) %如图9所示

与二维图形部分的等高线函数contour相类似,三维图形绘制函数中也有相应的等高线函数contour3,其常用的调用格式与函数contour相同。下面介绍三维等高线函数的示例。

【例10】绘制如图10所示的三维等高线图形。

图10 三维等高线示意图
[X, Y]=meshgrid(-4:0.5:4);
contour3(peaks(X, Y), 25)

这里详细介绍一下两个三维旋转体的绘制函数cylinder和sphere。

柱面图由函数cylinder绘制,其调用格式如下。

【例11】绘制如图11所示的柱面图。

图11 柱面图示意图
x=0:pi/20:pi * 3;
r=5+cos(x);
[a,b,c]=cylinder(r,30);
mesh(a,b,c)

球面图由函数sphere来绘制,其常用的调用格式如下。

【例12】绘制如图12所示的地球表面的气温分布示意图。

图12 地球表面的气温分布示意图
[a, b, c]=sphere(40);
t=abs(c);
urf(a, b, c, t);axis('equal') %这两句为了将坐标轴的刻度控制为相同的
axis('square');
colormap('hot');
文件下载(已下载 6388 次)

发布时间:2017/12/4 10:10:24  阅读次数:3584

2006 - 2023,推荐分辨率1024*768以上,推荐浏览器Chrome、Edge等现代浏览器,截止2021年12月5日的访问次数:1872万9823 站长邮箱

沪ICP备18037240号-1

沪公网安备 31011002002865号