其中,每一组
x
、
y
、
z
x、y、z
x、y、z 组成一组曲线的坐标参数,选项的定义和 plot 函数相同(线型、颜色和标记符号等参数,详见 MATLAB 之 二维图形绘制的基本函数和辅助操作)。
当
x
、
y
、
z
x、y、z
x、y、z 是同长度的向量时,则
x
、
y
、
z
x、y、z
x、y、z 对应元素构成一条三维曲线。
当
x
、
y
、
z
x、y、z
x、y、z 是同型矩阵时,则以
x
、
y
、
z
x、y、z
x、y、z 对应列元素绘制三维曲线,曲线条数等于矩阵列数。
例如,我们绘制空间曲线:
{
x
2
+
y
2
+
z
2
=
64
y
+
z
=
0
\left\{\begin{matrix}x^{2}+y^{2}+z^{2}=64 \\y+z=0 \end{matrix}\right.
{x2+y2+z2=64y+z=0
曲线对应的参数方程为
{
x
=
8
cos
t
y
=
4
2
sin
t
z
=
−
4
2
sin
t
,
0
≤
t
≤
2
π
\left\{\begin{matrix}x=8\cos t \\y=4\sqrt{2} \sin t \\z=-4\sqrt{2} \sin t \end{matrix}\right.\begin{matrix},0\le t\le 2\pi \end{matrix}
⎩⎨⎧x=8costy=42sintz=−42sint,0≤t≤2π
程序如下:
t=0:pi/50:2*pi;
x=8*cos(t);
y=4*sqrt(2)*sin(t);
z=-4*sqrt(2)*sin(t);plot3(x,y,z,'p');title('Line in 3-D Space');text(0,0,0,'origin');axis([-10,10,-10,10,-6,6]);xlabel('X');ylabel('Y');zlabel('Z');
grid;
程序运行结果如下图所示。
二、三维曲面
1. 平面网格坐标矩阵的生成
绘制
z
=
f
(
x
,
y
)
z=f(x,y)
z=f(x,y) 所代表的三维曲面图,先要在
x
y
xy
xy 平面选定一矩阵区域,假定矩形区域
D
=
[
a
,
b
]
×
[
c
,
d
]
D=[a,b]×[c,d]
D=[a,b]×[c,d],然后将
[
a
,
b
]
[a,b]
[a,b] 在
x
x
x 方向分成
m
m
m 份,将
[
c
,
d
]
[c,d]
[c,d] 在
y
y
y 方向分成
n
n
n 份。
由各划分点分别作平行于两坐标轴的直线,将区域
D
D
D 分成
m
×
n
m×n
m×n 个小矩形,生成代表每一个小矩形顶点坐标的平面网格坐标矩阵,最后利用有关函数进行绘图即可。
在上述程序段中,矩阵
X
的
X的
X的 每一行都是向量
x
x
x, 行数等于向量
y
y
y 的元素的个数,矩阵
Y
Y
Y 的每一列都是向量
y
y
y,列数等于向量
x
x
x 的元素的个数。
于是
X
X
X 和
Y
Y
Y相同位置上的元素
(
X
(
i
,
j
)
,
Y
(
i
,
j
)
(X(i, j),Y(i, j)
(X(i,j),Y(i,j) 恰好是区域
D
D
D 的
(
i
,
j
)
(i, j)
(i,j) 网格点的坐标。若根据每一个网格点上的
x
、
y
x、y
x、y坐标求函数值
z
z
z,则得到函数值矩阵
Z
Z
Z。
显然,
X
、
Y
、
Z
X、Y、Z
X、Y、Z 各列或各行所对应坐标,对应于一条空间曲线,空间曲线的集合组成空间曲面。
(2) 利用 meshgrid 函数生成。
x=a:dx:b;
y=c:dy:d;[X,Y]=meshgrid(x,y);
程序段运行后,所得到的网格坐标矩阵
X
、
Y
X、Y
X、Y与方法(1)得到的相同。当
x
=
y
x=y
x=y 时,meshgrid 函数可写成 meshgrid(x)。
为了说明网格坐标矩阵的用法,下面举一个例子, 该例子巧妙地利用网格坐标矩阵来解不定方程。
例如,已知
6
<
x
<
30
,
15
<
y
<
36
6<x<30,15<y<36
6<x<30,15<y<36,我们求不定方程
2
x
+
5
y
=
126
2x+5y=126
2x+5y=126 的整数解。
一般情况下,
x
、
y
、
z
x、y、z
x、y、z 是同型矩阵。
x
、
y
x、y
x、y 是网格坐标矩阵,
z
z
z 是网格点上的高度矩阵,
c
c
c 称为色标(color scale)矩阵,用于指定曲面的颜色。
在默认情况下,系统根据
c
c
c 中元素大小的比例关系,把色标数据变换成色图矩阵中对应的颜色。
当
c
c
c 省略时,MATLAB 认为
c
=
z
c=z
c=z,亦即颜色的设定正比于图形的高度,这样就可以得出层次分明的三维图形。
当
x
、
y
x、y
x、y 省略时,把
z
z
z 矩阵的列下标当作
x
x
x 轴坐标,把
z
z
z 矩阵的行下标当作
y
y
y 轴坐标,然后绘制三维曲面图。
当
x
、
y
x、y
x、y 是向量时,要求
x
x
x 的长度等于
z
z
z 矩阵的列数,
y
y
y 的长度等于
z
z
z 矩阵的行数,
x
、
y
x、y
x、y 向量元素的组合构成网格点的
x
、
y
x、y
x、y 坐标,
z
z
z 坐标则取自
z
z
z 矩阵,然后绘制三维曲面图。
例如,我们绘制三维曲面图
z
=
sin
y
cos
x
z=\sin y\cos x
z=sinycosx。
例如,我们分析
z
=
x
2
−
2
y
2
z=x^{2} -2y^{2}
z=x2−2y2 构成的曲面形状及与平面
z
=
a
z=a
z=a 的交线。
程序如下:
[x,y]=meshgrid(-10:0.2:10);
z1=(x.^2-2*y.^2)+eps;%第一个曲面坐标
a=input('a= ');
z2=a*ones(size(x));%第二个曲面坐标
subplot(1,2,1);mesh(x,y,z1);
hold on;mesh(x,y,z2);%分别画出两个曲面
v=[-10,10,-10,10,-100,100];%第一子图的坐标设置
axis(v);
grid;
hold off;
r0=abs(z1-z2)<=1;%求两曲面z坐标差小于1的点
xx=r0.*x;
yy=r0.*y;
zz=r0.*z2;%求这些点上的x、y、z坐标,即交线坐标
subplot(1,2,2);plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),'*');%在第二子图画出交线
axis(v);%第二子图的坐标设置
grid;
程序运行时,如果我们输入
a
=
−
25
a=-25
a=−25,所得三维曲面图和曲面的交线如下图所示。当我们输入的
a
a
a 不同时,曲面的交线就会发生变化。
此外,还有两个和 mesh 函数相似的函数,即带等高线的三维网格曲面函数 meshc 和带底座的三维网格曲面函数 meshz。其用法与 mesh 类似,不同的是 meshe 还在
x
y
xy
xy 平面上绘制曲面在
z
z
z 轴方向的等高线,meshz 还在
x
y
xy
xy 平面上绘制曲面的底座。
该函数将产生
(
n
+
1
)
×
(
n
+
1
)
(n+1)×(n+1)
(n+1)×(n+1) 矩阵
x
、
y
、
z
x、 y、z
x、y、z,采用这 3 个矩阵可以绘制出圆心位于原点、半径为 1 的单位球体。若在调用该函数时不带输出参数,则直接绘制所需球面。
n
n
n 决定了球面的圆滑程度,其默认值为 20。若
n
n
n 值取得较小,则将绘制出多面体表面图。
cylinder 函数的调用格式如下:
[x,y,z]=cylinder(R,n)
其中,
R
R
R 是一个向量,存放柱面各个等间隔高度上的半径,
n
n
n 表示在圆柱圆周上有
n
n
n 个间隔点,默认有 20 个间隔点。例如:
>>cylinder(3)
将生成一个圆柱。又例如:
>>cylinder([10,0])
将生成一个圆锥,而执行下列命令:
>> t=0:pi/100:4*pi;>> R=sin(t);>>cylinder(R,30);
将生成一个正弦型柱面。另外,生成矩阵的大小与
R
R
R 向量的长度及
n
n
n 有关。其余用法与 sphere 函数相同。
MATLAB 还有一个 peaks 函数,称为多峰函数,常用于三维曲面的演示。该函数可以用来生成绘图数据矩阵,矩阵元素由以下函数在矩形区域
[
−
3
,
3
]
×
[
−
3
,
3
]
[-3,3]×[-3,3]
[−3,3]×[−3,3] 的等分网格点上的函数值确定。
f
(
x
,
y
)
=
3
(
1
−
x
2
)
e
−
x
2
−
(
y
+
1
)
2
−
10
(
x
5
−
x
3
−
y
5
)
e
−
x
2
−
y
2
−
1
3
e
−
(
x
+
1
)
2
−
y
2
f(x,y)=3(1-x^{2})e^{-x^{2}-(y+1)^{2}}-10(\frac{x}{5}-x^{3}-y^{5})e^{-x^{2}-y^{2}}-\frac{1}{3}e^{-(x+1)^{2}-y^{2}}
f(x,y)=3(1−x2)e−x2−(y+1)2−10(5x−x3−y5)e−x2−y2−31e−(x+1)2−y2
例如:
z=peaks(30);
将生成一个
30
×
30
30×30
30×30 的矩阵
z
z
z,即分别沿
x
x
x 和
y
y
y 方向将区间
[
−
3
,
3
]
[-3,3]
[−3,3] 等分成 29 份,并计算这些网格点上的函数值。默认的等分数是 48,即 p=peaks 将生成一个
49
×
49
49×49
49×49 的矩阵
p
p
p。也可以根据网格坐标矩阵
x
、
y
x、y
x、y 重新计算函数矩阵。例如:
>>[x,y]=meshgrid(-5:0.1:5);>> z=peaks(x,y);
生成的数值矩阵可以作为 mesh、surf 等函数的参数而绘制出多峰函数曲面图。另外,若在调用 peaks 函数时不带输出参数,则直接绘制出多峰函数曲面图。
在第一种格式中,
y
y
y 的每个元素对应于一个条形。第二种格式在
x
x
x 指定的位置上绘制
y
y
y 中元素的条形图。
bar3h 的用法与 bar3 相同。
2. 三维饼图
pie3 函数绘制三维饼图,常用格式如下:
pie3(x,explode)
其中
x
x
x 为向量,用
x
x
x 中的数据绘制一个三维饼图,explode 设置相应的扇形是否偏离整体图形。
3. 三维实心图
fill3 函数可在三维饼图内绘制出填充过的多边形,常用格式如下:
fill3(x,y,z,c)
其中使用
x
、
y
、
z
x、y、z
x、y、z 作为多边形的顶点,而
c
c
c 指定了填充的颜色。
4. 三维散点图
scatter3 函数可在三维空间内绘制散点图,常用格式如下:
scatter3(x,y,z,c)
其中
x
、
y
、
z
x、y、z
x、y、z 必须时等长度的向量,而
c
c
c 指定了填充的颜色。
5. 三维杆图
stem3 函数绘制离散序列数据的三维杆图,常用格式如下:
stem3(z)stem3(x,y,z)
第一种将数据序列
z
z
z 表示为从
x
y
xy
xy 平面向上延申的杆图,
x
x
x 和
y
y
y 自动生成。第二种格式在
x
x
x 和
y
y
y 指定的位置上绘制数据序列
z
z
z 的杆图。
6. 三维箭头图
quiver3 函数绘制三维空间的矢量图,常用格式如下:
quiver3(x,y,z,u,v,w)
其中
x
、
y
、
z
、
u
、
v
、
w
x、y、z、u、v、w
x、y、z、u、v、w 必须长度一样,绘制三维矢量图。矢量由
(
u
,
v
,
w
)
(u,v,w)
(u,v,w) 决定,所在位置由
(
x
,
y
,
z
)
(x,y,z)
(x,y,z) 决定。例如,quiver3(1,2,3,4,5,6) 是以 (1,2,3) 为起点绘制一个矢量,即一个由 (1,2,3) 指向 (4,5,6) 的箭头。