
一、实验目的
学会MATLAB软件中三维绘图的方法。
二、实验内容与要求
1.三维曲线图
格式一:plot3(X,Y,Z,S).
说明:当X,Y,Z均为同维向量时,则plot3描出点X(i),Y(i),Z(i)依次相连的空间曲线.若X,Y均为同维矩阵,X,Y,Z每一组相应列向量为坐标画出一条曲线,S为‘color﹣linestyle﹣marker’控制字符表1.6~表1.10.
【例 1.79】绘制螺旋线.
>>t=0:pi/60:10*pi;
>>x=sin(t);
>>y=cos(t);
>>plot3(x,y,t,’*-b’)
>>grid on
图形的结果如图1.16所示.
格式二:comet3(x,y,z).
说明:显示一个彗星通过数据x,y,z确定的三维曲线.
【例1.80】
>>t=-20*pi:pi/50:20*pi;
>>comet3(sin(t),cos(t),t)
可见到彗星头(一个小圆圈)沿着数据指定的轨道前进的动画图象,彗星轨道为整个函数所画的螺旋线.
格式三:fill3(X,Y,Z,C)℅填充由参数X,Y,Z确定的多边形,参数C指定颜色.
图1.16例 1.79图形结果图 1.17例1.81图形结果
【例1.81】>>X=[2,1,2;9,7,1;6,7,0];
>>Y=[1,7,0;4,7,9;0,4,3];
>>Z=[1,8,6;7,9,6;1,6,1];
>>C=[1,0,0;0,1,0;0,0,1]
>>fill3(X,Y,Z,C)
>>grid on
图形的结果如图1.17所示.
问题 1.30:图 1.17中每个三角形按什么规律画出的?(用X,Y,Z的对应列元素值为坐标画三角形)每个三角形内填充的颜色又有何规律?(用C 第i列元素值对应的颜色,从第i个三角形对应顶点向中心过渡)若C=[1,5,10;1,5,10;1,5,10],结果如何?
2.三维网格图
格式:mesh(X,Y,Z,C)℅画出颜色由C指定的三维网格图.
meshc(X,Y,Z,C)℅画出带有等高线的三维网格图.
meshz(X,Y,Z,C)℅画出带有底座的三维网格图.
说明:若X与Y均为向量,n=length(X),m=length(Y),Z必须满足[m,n]=size(Z),则空间中的点(X(j),Y(i),Z(i,j))为所画曲面网线的交点,X 对应于Z的列,Y对应于Z的行;若X,Y,Z均为同维矩阵,则空间中的点(X(i,j),Y(i,j),Z(i,j))为所画曲面的网线的交点;矩阵C指定网线的颜色,MATLAB对矩阵C中的数据进行线性处理,以便从当前色图中获得有用的颜色,若C缺省,网线颜色和曲面的高度Z相匹配.
在三维作图常用到命令meshgrid,其功能是生成二元函数z=f(x,y)中x-y平面上的矩形定义域中数据点矩阵X和Y.
格式:[X,Y]=meshgrid(x,y).
说明:输入向量x为x-y平面上x轴的值,向量y为x-y平面上y轴的值.输出矩阵X为x-y平面上数据点的横坐标值,输出矩阵Y为x-y平面上数据点的纵坐标值.
【例1.82】
>>x=1:4;
>>y=1:5;
>>[x,y]=meshgrid(x,y)
x=
1234
1234
1234
1234
1234
y=
1111
2222
3333
4444
5555
图1.18所示x-y 平面上的矩形定义域中20个数据点(星号点)的坐标就是有X ,Y 决定的。
【例1.83】绘出带有底座的马鞍面。
222245
x y Z =->>[x,y]=meshgrid(x,y);
>>z=(x.^2/4^2-y.^2/5^2);
>>x=-8:8;
>>y=-8:8;
>>[X,Y]=meshgrid(x,y);
>>Z=(x.^2/4^2-y.^2/5^2);
>>meshz(X,Y ,Z)
图形结果如图1.19所示。
图1.19例1.83图形结果
问题1.31:将mesh(X,Y,Z)改为mesh(x,y,Z),结果如何?(一样)曲面网格颜色有何规律?(从高到低按赤、橙、黄、绿、青、蓝、紫排列)
3.三维曲面图格式:surf(X,Y,Z,C)%画出颜色由C 指定的三维曲面图。
Surfc(X,Y,Z,C)%画出带有等高线的三维曲面图。
说明:surf 同mesh 命令用法和使用格式相同,不同之处在于绘得的图形是一个彩色曲面而
不是彩色网格。C 缺省时,数据Z 同时为曲面高度,也是颜色数据。
【例1.84】绘出带有等高线的理想气体状态方程曲面。
pv=nRT,n=2mol:
>>R=8.31;
>>n=2;
>>p=(1:20)*1e5;
>>v=(1:20)*1e-3;
>>[p,v]=meshgrid(p,v);
>>T=p.*v/n/R;
>>surfc(p,v,T);
>>view(45,30)
图形结果如图1.20所示。
4.三维旋转曲面图格式:[X ,Y ,Z]=cylinder(r,n).
说明:返回一母线向量为r 、高度为1的旋转曲面x,y,z 轴的坐标值,旋转轴为z 轴,旋转曲面的圆周有指定的n 个距离相同的点。用户可以用命令surf 或命令mesh 画出旋转曲面图像。
【例1.85】绘制一个旋转抛物面22
()z x y =+/60.
>>z=0:20;
>>R=(60*z).^(1/2);>>[X,Y,Z]=cylinder(R,40);
>>mesh(X,Y,Z)
图形结果如图 1.21所示。
图1.20例1.84图形结果图1.21例1.85的图形结果
5.三维球面图格式:[X ,Y ,Z]=sphere(n).
说明:生成三维直角坐标系中的单位球体坐标,该单位球体有个面。该命令没有画图,只有返回矩阵,用户可以用命令surf(X,Y,Z)或mesh(X,Y,Z)画出球体。
【例1.86】
>>[X,Y,Z]=sphere;
>>mesh(X,Y,Z)
图形结果如图 1.22
所示。
图1.22例1.86图形结果
三、练习和思考1画出如下三维网格曲面图。
四、提高内容
1.矢量图格式:quiver(X,Y,U,V)%在由向量X 和Y 决定的每一个平面点上画出由U,V 决定的向量.
quiver(…,scale)%自动对向量的长度进行处理,若scale=2,则向量长度伸长2倍,若scale=0,则如实画出向量图.
【例1.87】:给出点电荷的电场强度分布图;
2222,4/Y
X R R Q E +==πε,
设,,14/U E Q -∇==由πε求出 E.
>>[X,Y]=meshgrid(-19:2:19);
>>R=(X.^2+Y.^2).^(1/2);
>>U=1./R;
>>[EX,EY]=gradient(U);
>>quiver(X,Y,-EX,-EY,0.5)
>>axis square 结果如图1.23所示.
图:1.23例1.87图形结果
注意:gradient 为梯度算符∇,电场强度的大小图中
是用箭头长短表示的.
格式一:contour(x,y,z,n).
说明:(x,y)是平面z=0上点的坐标矩阵,二维函数z为相应点的高度值矩阵,等高曲线是一个平面的曲线,n是等高线条数.
[c,h]=contour(…)%返回contourc命令描述的等高矩阵c和句柄列向量h,这些可作为clabel命令的输入参量,每条线对应一个句柄.
contour(…,’linespec’)%因为\\等高线是一当前的色图中的颜色画的,且是作为块对象处理的,即等高线是一般的线条,我们可像画普通线条一样,指定等高线的颜色或者线形.
【例1.88】
[x,y]=meshgrid(-2:0.2:2);
>>z=x.*y.*exp(-x.^2-y.^2);
>>contour(x,y,z,8);
图形结果如图1.24所示.
格式二:clabel(C,h).
说明:在从命令contour生成的二维等高线结构C的位置上添加标签h.
【例1.】
>>[x,y]=meshgrid(-2:.2:2);[x,y]=meshgrid(-2:.2:2);
>>z=x.*y.*exp(-x.^2-y.^2);
>>[C,h]=contour(x,y,z);
>>clabel(C,h);
图
1.24格式一图形结果图1.25格式二图形结果
格式三:contour(X,Y,Z,n)
说明:用X与Y定义x,y轴的范围,画出由矩阵Z确定的n条等高线的三维图.
【例1.90】
>>[X,Y]=meshgrid([-2:0.25:2]);
>>Z=X.*exp(-X.^2-Y.^2);
>>contour3(X,Y,Z,30)
图形结果如图1.26所示.
3.三维曲面法线图
格式:surfnorm(X,Y,Z)
说明:画出一曲面与它的法线图,其中,矩阵Z用于指定曲面的高度值,X与Y为向量或矩阵,用于定义曲面的x与y部分.
【例1.91】
>>[x,y,z]=cylinder(1:10);
>>surfnorm(x,y,z)
图1.26格式三图形结果图1.27例 1.91图形结果四.三维饼图
格式:pie3(X,explode).
说明:x中的某一部分可以从三维饼形图中分离出来,explode是一个与x同型的向量或矩阵,explode中非零的元素对应x中从饼形图中分离出来的分量.
【例1.92】
>>x=[1,3,0.5,2.5,2]
x =
1.0000 3.00000.5000
2.5000 2.0000
>>ex=[0,1,0,0,0]
ex =
1000
>>pie3(x,ex)图形如图1.28所示.
图1.28例 1.92图形结果
5.直角坐标,柱坐标,球坐标之间的转换柱坐标和直角坐标之间的转换.格式:),(],[2r theta cart pol y x =%将二维极坐标转换为直角坐标.
),(],[2y x pol cart r theta =%将二维直角坐标转换为极坐标
),,(],,[2z r theta cart pol z y x =%将三维柱坐标转换为直角坐标
),,(],,[2
z y x pol cart z r theta =%将三维直角坐标转换为柱坐标【例1.93】
>>theta=0:pi/30:2*pi;
>>ro=sin(theta);
>>[t,r]=meshgrid(theta,ro);
>>z=r.*t;
>>[x,y,z]=pol2cart(t,r,z);
>>mesh(x,y,z)
图形结果如图1.29所示.
球坐标和直角坐标之间的转换.
格式:),,(],,[2
r phi theta cart sph z y x =%将三维球坐标转换为直角坐标.)
,,(],,[2z y x sph cart r phi theta =%将三维直角坐标转换为球坐标.【例1.94】
>>ph=theta.^2-theta;
>>[t,p]=meshgrid(theta,ph);
>>r=t.*p;
>>[x,y,z]=sph2cart(t,p,r);
>>mesh(x,y,z)
图形结果如图1.30所示.
图1.29例1.93图形结果图1.30例1.94图形结果
