为啥matlab5条轨迹画出4条线,matlab 绘图与图形处理(四)

7.2 三维图形

7.2.1 三维曲线、面填色命令

命令1 comet3

功能 三维空间中的彗星图。彗星图为一个三维的动画图像,彗星头(一个小圆圈)沿着数据指定的轨道前进,彗星体为跟在彗星头后面的一段痕迹,彗星轨道为整个函数所画的实曲线。注意一点的是,该彗星轨迹的显示模式EraseMode为none,所以用户不能打印出彗星轨迹(只能得到一个小圆圈),且若用户调整窗口大小,则彗星会消失。

用法 comet3(z) 用向量z中的数据显示一个三维彗星

comet3(x,y,z) 显示一个彗星通过数据x,y,z确定的三维曲线。

comet3(x,y,z,p) 指定彗星体的长度为:p*length(y)。

例7-24

>>t = -20*pi:pi/50:20*pi;

>>comet3((cos(2*t).^2).*sin(t),(sin(2*t).^2).*cos(t),t);

图形的结果为图7-24。

a4c26d1e5885305701be709a3d33442f.png

命令2 fill3

功能 用指定的颜色填充三维多边形。阴影类型为平面型和Gouraud型。

用法 fill3(X,Y,Z,C) 填充由参数x,y和z确定多边形。若x,y或z为矩阵,fill3生成n个多边形,其中n为矩阵的列数。在必要的时候,fill3会自动连接最后一个节点和第一个节点。以便能形成封闭的多边形。参数c指定颜色,这儿c为引用当前色图的下标向量或矩阵。若c为行向量,则c的维数必须等于x的列数和y的列数,若c为列向量,则c的维数必须等于矩阵x的行数和y的行数。

fill3(X,Y,Z,ColorSpec) 用指定的颜色ColorSpec填充由x,y和z确定的多边形。

fill3(X1,Y1,Z1,C1,X2,Y2,Z2,C2,…)对多边形的不同区域用不同的颜色进行填充。

fill3(…,'PropertyName',PropertyValue)允许用户对特定的patch属性进行设置。

h = fill3(…)返回patch图形对象的句柄向量,每一块(patch)对应一个句柄。

运算规则:

1.若X,Y,Z为同型的矩阵,fill3生成X,Y,Z中相同位置的元素确定的顶点,每一列生成一个多边形。

2.若只有X,Y或Z为矩阵,则fill3由列向量参数生成可用的同型矩阵。

3.若用户对填充的颜色指定为ColorSpec,则fill3生成阴影类型为flat-shaded的多边形,且设置块(patch)的属性FaceColor为RGB颜色形式的矩阵。

4.若用户用矩阵C指定颜色,命令fill3通过坐标轴属性Clim来调整C中的元素,在引用当前色图之前,用于指定颜色坐标轴的参数比例。

5.若参数C为一行向量,命令fill3生成带平面阴影(flat-shaded)的多边形,同时设置补片对象的面颜色(FaceColor)属性为flat。向量c中的每一元素成为每一补片对象的颜色数据(CData)属性的值。

6.若参数C为一矩阵,命令fill3生成带内插颜色的多边形,同时设置多边形补片对象的FaceColor属性为interp。命令fill3采用对多边形顶点色图的下标指定的颜色采用线性内插算法,同时多边形的颜色采用对顶点颜色用内插算法得到的颜色。矩阵C的每一列元素变成对应补片对象的Cdata属性值。

7.若参数C为一列向量,命令fill3先复制C的元素,使之成为所需维数的矩阵,再按上面的方法6进行计算。

例7-25

>>X = 10*rand(4);Y=10*rand(4);Z=10*rand(4);

>>C = rand(4);

>>fill3(X,Y,Z,C)

图形结果可能为图7-25。

a4c26d1e5885305701be709a3d33442f.png

7.2.2 三维图形等高线

命令1 contour

功能 曲面的等高线图

用法 contour(z) 把矩阵z中的值作为一个二维函数的值,等高曲线是一个平面的曲线,平面的高度v是Matlab自动取的;

contour(x,y,z) (x,y)是平面z=0上点的坐标矩阵,z为相应点的高度值矩阵。效果同上;

contour(z,n) 画出n条等高线;

contour(x,y,z,n) 画出n条等高线;

contour(z,v) 在指定的高度v上画出等高线;

contour(x,y,z,v) 同上;

[c,h] = contour(…) 返回如同contourc命令描述的等高矩阵c和线句柄或块句柄列向量h,这些可作为clabel命令的输入参量,每条线对应一个句柄,句柄中的userdata属性包含每条等高线的高度值;

contour(…,’linespec’) 因为等高线是以当前的色图中的颜色画的,且是作为块对象处理的,即等高线是一般的线条,我们可象画普通线条一样,可以指定等高线的颜色或者线形。

例7-26

>>contour(peaks(40))

图形结果为图7-26。

a4c26d1e5885305701be709a3d33442f.png

命令2 clabel

功能 在二维等高线图中添加高度标签。在下列形式中,若有h出现,则会对标签进行恰当的旋转,否则标签会竖直放置,且在恰当的位置显示个一个“+”号。

用法 clabel(C,h) 把标签旋转到恰当的角度,再插入到等高线中。只有等高线之间有足够的空间时才加入,当然这决定于等高线的尺度。

clabel(C,h,v) 在指定的高度v上显示标签h,当然要对标签做恰当的处理。

clabel(C,h,'manual') 手动设置标签。用户用鼠标左键或空格键在最接近指定的位置上放置标签,用键盘上的回车键结束该操作。当然会对标签做恰当的处理。

clabel(C) 在从命令contour生成的等高线结构c的位置上添加标签。此时标签的放置的位置是随机的。

clabel(C,v) 在给定的位置v上显示标签

clabel(C,'manual') 允许用户通过鼠标来给等高线贴标签

例7-27

>>[x,y] = meshgrid(-2:.2:2);

>>z = x.*y.*exp(-x.^2-y.^2);

>>[C,h] = contour(x,y,z);

>>clabel(C,h);

图形结果为图7-27。

a4c26d1e5885305701be709a3d33442f.png

命令3 contourc

功能 低级等高线图形计算命令。该命令计算等高线矩阵c,该矩阵可用于命令contour,contour3和contourf等。矩阵z中的数值确定平面上的等高线高度值,等高线的计算结果用由矩阵z维数决定的间隔的宽度。

用法 C = contourc(Z) 从矩阵z中计算等高矩阵,其中z的维数至少为2*2阶,等高线为矩阵z中数值相等的单元。等高线的数目和相应的高度值是自动选择的。

C = contourc(Z,n) 在矩阵z中计算出n个高度的等高线。

C = contourc(Z,v) 在矩阵z中计算出给定高度向量v上计算等高线,当然向量v的维数决定了等高线的数目。若只要计算一条高度为a的等高线,输入:contourc(Z,[a,a]);

C = contourc(x,y,Z) 在矩阵z中,参量x,y确定的坐标轴范围内计算等高线;

C = contourc(x,y,Z,n) 从矩阵Z中,参量x与y确定的坐标范围内画出n条等高线;

C = contourc(x,y,Z,v) 从矩阵Z中,参量x与y确定的坐标范围内,画在v指定的高度上指定的等高线。

命令4 contour3

功能 三维空间等高线图。该命令生成一个定义在矩形格栅上曲面的三维等高线图。

用法 contour3(Z) 画出三维空间角度观看矩阵z的等高线图,其中z的元素被认为是距离xy平面的高度,矩阵z至少为2*2阶的。等高线的条数与高度是自动选择的。若[m,n]=size(z),则x轴的范围为[1:n],y轴的范围为[1:m]。

contour3(Z,n) 画出由矩阵z确定的n条等高线的三维图。

contour3(Z,v) 在参量v指定的高度上画出三维等高线,当然等高线条数与向量v的维数相同;若想只画一条高度为h的等高线,输入:contour3(Z,[h,h])

contour3(X,Y,Z)、contour3(X,Y,Z,n)、contour3(X,Y,Z,v)用X与Y定义x-轴与y-轴的范围。若X为矩阵,则X(1,:)定义x-轴的范围;若Y为矩阵,则Y(:,1)定义y-轴的范围;若X与Y同时为矩阵,则它们必须同型。不论为哪种使用形式,所起的作用与命令surf相同。若X或Y有不规则的间距,contour3还是使用规则的间距计算等高线,然后将数据转变给X或Y。

contour3(…,LineSpec)用参量LineSpec指定的线型与颜色画等高线。

[C,h] = contour3(…)画出图形,同时返回与命令contourc中相同的等高线矩阵C,包含所有图形对象的句柄向量h;除非没有指定LineSpec参数,contour3将生成patch图形对象,且当前的colormap属性与caxis属性将控制颜色的显示。不论使用何种形式,该命令都生成line图形对象。

例7-28

>>[X,Y] = meshgrid([-2:.25:2]);

>>Z = X.*exp(-X.^2-Y.^2);

>>contour3(X,Y,Z,30)

图形结果为图7-28。

a4c26d1e5885305701be709a3d33442f.png

命令5 contourf

功能 填充二维等高线图。即先画出不同等高线,然后相邻的等高线之间用同一颜色进行填充。填充用的颜色决定于当前的色图颜色。

用法 contourf(Z) 矩阵z的等高线图,其中z理解成距平面的高度。Z至少为2*2阶的。等高线的条数与高度是自动选择的。

contourf(Z,n) 画出矩阵z的n条高度不同的等高线。

contourf(Z,v) 画出矩阵z的、由v指定的高度的等高线图。

contourf(X,Y,Z)、contourf(X,Y,Z,n)、contourf(X,Y,Z,v)画出矩阵z的等高线图,其中X与Y用于指定x-轴与y-轴的范围。若X与Y为矩阵,则必须与Z同型。若X或Y有不规则的间距,contour3还是使用规则的间距计算等高线,然后将数据转变给X或Y。

[C,h,CF] = contourf(…)画出图形,同时返回与命令contourc中相同的等高线矩阵C,C也可被命令clabel使用;返回包含patch图形对象的句柄向量h;返回一用于填充用的矩阵CF。

例7-29

>>contourf(peaks(30),20);

>>colormap gray

图形结果为图7-29。

a4c26d1e5885305701be709a3d33442f.png

命令6 pie3

功能 三维饼形图

用法 pie3(X) 用x中的数据画一个三维饼形图。X中的每一个元素代表三维饼形图中的一部分。

pie3(X,explode) x中的某一部分可以从三维饼形图中分离出来。explode是一个与x同型的向量或矩阵,explode中非零的元素对应x中从饼形图中分离出来的分量。

h = pie3(…)返回一个分量为patch,surface和text图形句柄对象的向量。即每一块对应一个句柄。

注意:命令pie3将x的每一个元素在所有元素的总和中所占的比例表达出来。若x中的分量和小于1(则所有元素小于1),则认为x中的值指明三维饼形图的每一部分的大小。

例7-30

>>x = [1 3 0.5 2.5 2]

>>ex = [0 1 0 0 0]

>>pie3(x,ex)

图形结果为图7-30。

a4c26d1e5885305701be709a3d33442f.png

7.2.3 曲面与网格图命令

命令1 mesh

功能 生成由X,Y和Z指定的网线面,由C指定的颜色的三维网格图。网格图是作为视点由view(3)设定的surface图形对象。曲面的颜色与背景颜色相同(当要动画显示不透明曲面时,这时可用命令hidden控制),或者当画一个标准的可透视的网线图时,曲面的颜色就没有(命令shading控制渲染模式)。当前的色图决定线的颜色。

用法 mesh(X,Y,Z) 画出颜色由c指定的三维网格图,所以和曲面的高度相匹配,

1.若X与Y均为向量,length(X)=n,length(Y)=m,而[m,n]=size(Z),空间中的点(X(j),Y(I),Z(I,j)) 为所画曲面网线的交点,分别地,X对应于z的列,Y对应于z的行。

2.若X与Y均为矩阵,则空间中的点 (X(I,j),Y(I,j),Z(I,j))为所画曲面的网线的交点。

mesh(Z) 由[n,m] = size(Z)得,X =1:n与Y=1:m,其中z为定义在矩形划分区域上的单值函数。

mesh(…,C)用由矩阵c指定的颜色画网线网格图。Matlab对矩阵c中的数据进行线性处理,以便从当前色图中获得有用的颜色。

mesh(…,PropertyName’,PropertyValue, …)对指定的属性PropertyName设置属性值PropertyValue,可以在同一语句中对多个属性进行设置。

h = mesh(…)返回surface图形对象句柄。

运算规则:

1.数据X,Y和z的范围,或者是对当前轴的XLimMode,YLimMode和ZLimMode属性的设置决定坐标轴的范围。命令aXis可对这些属性进行设置。

2.参量c的范围,或者是对当前轴的Clim和ClimMode属性的设置(可用命令caxis进行设置),决定颜色的刻度化程度。刻度化颜色值作为引用当前色图的下标。

3.网格图显示命令生成由于把z的数据值用当前色图表现出来的颜色值。Matlab会自动用最大值与最小值计算颜色的范围(可用命令caxis auto进行设置),最小值用色图中的第一个颜色表现,最大值用色图中的最后一个颜色表现。Matlab会对数据的中间值执行一个线性变换,使数据能在当前的范围内显示出来。

例7-31

>>[X,Y] = meshgrid(-3:.125:3);

>>Z = peaks(X,Y);

>>mesh(X,Y,Z);

图形结果为图7-31。

a4c26d1e5885305701be709a3d33442f.png

命令2 surf

功能 在矩形区域内显示三维带阴影曲面图。

用法 surf(Z) 生成一个由矩阵z确定的三维带阴影的曲面图,其中[m,n] = size(Z),而X = 1:n,Y = 1:m。高度z为定义在一个几何矩形区域内的单值函数,z同时指定曲面高度数据的颜色,所以颜色对于曲面高度是恰当的。

surf(X,Y,Z) 数据z同时为曲面高度,也是颜色数据。X和Y为定义X坐标轴和Y坐标轴的曲面数据。若X与Y均为向量,length(X)=n,length(Y)=m,而[m,n]=size(Z),在这种情况下,空间曲面上的节点为(X(I),Y(j),Z(I,j))。

surf(X,Y,Z,C) 用指定的颜色c画出三维网格图。Matlab会自动对矩阵c中的数据进行线性变换,以获得当前色图中可用的颜色。

surf(…,’PropertyName’,PropertyValue) 对指定的属性PropertyName设置为属性值PropertyValue

h = surf(…) 返回一个surface图形对象句柄给变量h。

运算规则:

1.严格地讲,一个参数曲面是由两个独立的变量I、j来定义的,它们在一个矩形区域上连续变化。例如,a<=I<=b,c<=j<=d,三个变量X,Y,Z确定了曲面。曲面颜色由第四参数矩阵C确定。

2.矩形定义域上的点有如下关系:

A(I-1,j)

|

B(I,j-1) ---- C(I,j) ---- D(I,j+1)

|

E(I+1,j)

这个矩形坐标方格对应于曲面上的有四条边的块,在空间的点的坐标为[X(J,Y(J,Z),每个矩形内部的点根据矩形的下标和相邻的四个点连接;曲面上的点只有相邻的三个点,曲面上四个角上的点只有两个相邻点,上面这些定义了一个四边形的网格图。

3.曲面颜色可以有两种方法来指定:指定每个节点的颜色或者是每一块的中心点颜色。在这种一般的设置中,曲面不一定为变量X和Y的单值函数,进一步而言,有四边的曲面块不一定为平面的,而可以用极坐标,柱面坐标和球面坐标定义曲面。

4.命令shading设置阴影模式。若模式为interp,C必须与X,Y,Z同型;它指定了每个节点的颜色,曲面块内的颜色由附近几个点的颜色用双线性函数计算出来的。若模式为facted(缺省模式)或flat,c(I,j)指定曲面块中的颜色:

A(I,j)----------- B (I,j+1)

| C(I,j) |

C(I+1,j) --------- D(I+1,j)

在这种情形下,C可以与X,Y,和Z同型,且它的最后一行和最后一列将被忽略,换句话说,就是C的行数和列数可以比X,Y,Z少1。

5.命令surf将指定图形视角为view(3)。

6.数据X,Y,Z的范围或者通过对坐标轴的属性XlimMode,YlimMode和ZlimMode的当前设置(可以通过命令axis来设置),将决定坐标轴的标签。

7.参数C的范围或者通过对坐标轴的属性Clim和ClimMode的设置(可以通过命令caxis来设置),将决定颜色刻度化。刻度化的颜色值将作为引用当前色图的下标。

例7-32

>>[X,Y,Z] = peaks(30);

>>surf(X,Y,Z)

>>colormap hsv

结果图形为图7-32。

a4c26d1e5885305701be709a3d33442f.png

命令3 surfc

功能 在矩形区域内显示三维带阴影曲面图,且在曲面下面画出等高线。

用法 surfc(Z)、surfc(X,Y,Z)、surfc(X,Y,Z,C)、

surfc(…,’PropertyName’,PropertyValue)、

surfc(…)、h = surfc(…)

上面各个使用形式的曲面效果与命令surf的相同,只不过是在曲面下面增加了曲面的等高线而已。

例7-33

>>[X,Y,Z] = peaks(30);

>>surfc(X,Y,Z)

>>colormap hsv

图形结果为图7-33。

a4c26d1e5885305701be709a3d33442f.png

命令4 surfl

功能 画带光照模式的三维曲面图。该命令显示一个带阴影的曲面,结合了周围的,散射的和镜面反射的光照模式。想获得较平滑的颜色过度,要使用有线性强度变化的色图(如:gray,copper,bone,pink等)。参数X,Y,Z确定的点定义了参数曲面的“里面”和“外面”,若用户想曲面的“里面”有光照模式,只要使用:

surfl(X’,Y’,Z’)

用法 surfl(Z) 以向量z的元素生成一个三维的带阴影的曲面,其中阴影模式中的光源的方位、光照系数为缺省值(见下面)。

surfl(X,Y,Z) 以矩阵X,Y,Z生成的一个三维的带阴影的曲面,其中阴影模式中的光源的方位、光照系数为缺省值(见下面)。

surfl(…,’light’) 用一个matlab光照对象(light object)生成一个带颜色、带光照的曲面,这与用缺省光照模式产生的效果不同。

surfl(…,’cdata’) 改变曲面颜色数据(color data),使曲面成为可反光的曲面。

surfl(…,s)指定光源与曲面之间的方位s,其中s为一个二维向量[azimuth,elevation],或者三维向量[sx,sy,sz]。缺省光源方位为从当前视角开始,逆时针45℉(度)。

surfl(X,Y,Z,s,k) 指定反射常系数k,其中k为一个定义环境光(ambient light)系数(0<=ka<=1)、漫反射(diffuse reflection)系数(0〈=kb〈=1〉、镜面反射(specular reflection)系数(0〈=ks〈=1〉与镜面反射亮度(以相素为单位)等的四维向量[ka,kd,ks,shine],缺省值为k=[0.55 0.6 0.4 10]。

h = surfl(…) 返回一个曲面图形句柄向量h。

例7-34

>>[X,Y] = meshgrid(-3:1/8:3);

>>Z = peaks(X,Y);

>>surfl(X,Y,Z);

>>shading interp

>>colormap(gray);

图形结果为图7-34。

a4c26d1e5885305701be709a3d33442f.png

命令5 waterfall

功能 瀑布图

用法 waterfall(X,Y,Z) 用所给参数X、Y与Z的数据画一“瀑布”效果图。若X与Y都是向量,则X与Z的列相对应,Y与Z的行相对应,即length(X)=Z的列数,length(Y)=Z的行数。参数X与Y定义了x-轴与y-轴,Z定义了z-轴的高度,Z同时确定了颜色,所以颜色能恰当地反映曲面的高度。若想研究数据的列,可以输入:waterfall(Z’)或waterfall(X’,Y’,Z’)

waterfall(Z) 画出一瀑布图,其中缺省地有:X=1:Z的行数,Y=1:Z的行数,且Z同时确定颜色,所以颜色能恰当地反映曲面高度。

waterfall(…,C)用比例化的颜色值从当前色图中获得颜色,参量C决定颜色的比例,为此,必须与Z同型。系统使用一线性变换,从当前色图中获得颜色。

h = waterfall(…)返回patch图形对象的句柄h,可用于画出图形。

例7-35

>>[X,Y,Z] = peaks(30);

>>waterfall(X,Y,Z)

图形结果为图7-35。

a4c26d1e5885305701be709a3d33442f.png

命令6 cylinder

功能 生成圆柱图形。该命令生成一单位圆柱体的x-,y-,z-轴的坐标值。用户可以用命令surf或命令mesh画出圆柱形对象,或者用没有输出参量的形式而立即画出图形。

用法 [X,Y,Z] = cylinder 返回一半径为1、高度为1的圆柱体的x-,y-,z-轴的坐标值,圆柱体的圆周有20个距离相同的点。

[X,Y,Z] = cylinder® 返回一半径为r、高度为1的圆柱体的x-,y-,z-轴的坐标值,圆柱体的圆周有20个距离相同的点。

[X,Y,Z] = cylinder(r,n) 返回一半径为r、高度为1的圆柱体的x-,y-,z-轴的坐标值,圆柱体的圆周有指定的n个距离相同的点。

cylinder(…)没有任何的输出参量,直接画出圆柱体。

例7-36

>>t = 0:pi/10:2*pi;

>>[X,Y,Z] = cylinder(2+(cos(t)).^2);

>>surf(X,Y,Z); axis square

图形结果为图7-36。

a4c26d1e5885305701be709a3d33442f.png

命令7 sphere

功能 生成球体

用法 sphere 生成三维直角坐标系中的单位球体。该单位球体由20*20个面。

sphere(n) 在当前坐标系中画出有n*n个面的球体

[X,Y,Z] = sphere(n) 返回三个阶数为(n+1)*(n+1)的,直角坐标系中的坐标矩阵。该命令没有画图,只是返回矩阵。用户可以用命令surf(X,Y,Z)或mesh(X,Y,Z)画出球体。

例7-37

>>[X,Y,Z]=sphere;

>>mesh(X,Y,Z)

>>hidden off

图形结果为图7-37。

a4c26d1e5885305701be709a3d33442f.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值