【例6.4.1.4-1】读者试验本例时,注意三点:MATLAB画任意多边形的一种方法;保证绘图数据首尾重合,使勾画多边形封闭;使用图柄对图形的属性进行精细设置。
clf;n=10;
dt=2*pi/n;t=0:dt:2*pi; t=[t,t(1)];
x=sin(t);y=cos(t);
fill(x,y,'c');axis off
ht=text(0,0,'\\fontname{隶书}\\fontsize{32}十边形'); set(ht,'Color','k','HorizontalAlignment','Center') ?±??
图 6.4-5
【例6.4.1.4-2】三维填色指令fill3 演示。注意:(1)X,Y,Z的相应列元素构成一个三维封闭多边形。本例有4列,因此有4个多边形。图6.4.1.4-2中的“1,2,3,4”号三角形分别由X,Y,Z的第1,2,3,4列生成。(2)为使多边形封闭,每列的首尾元素应该重合。若不重合,则将默认把最后一点与第一点相连,强行使多边形封闭。(3)该指令的第4输入宗量可取定色单字符(如'r' , 'g' 等),也可取与X同维的数值矩阵。(4)所填色彩受C和色图的双重响应。(5)本例图中三角形的编号是通过“图形窗”编辑而生成的。
X=[0.5 0.5 0.5 0.5;0.5 0.5 0.5 0.5;0 1 1 0]; Y=[0.5 0.5 0.5 0.5;0.5 0.5 0.5 0.5;0 0 1 1];
Z=[1 1 1 1;0 0 0 0;0 0 0 0];C=[1 0 0 1;0 1 0 1;0 0 1 0]; fill3(X,Y,Z,C),view([-10 55]),colormap cool xlabel('x'),ylabel('y'),box on;grid on 10.5010.80.60.40.2y004 1 2 3 0.2x0.40.60.81图 6.4-6
16
6.4.1.5 射线图compass和羽毛图feather
【例6.4.1.5-1】 compass和feather指令的区别。
t=-pi/2:pi/12:pi/2; r=ones(size(t));
[x,y]=pol2cart(t,r);
subplot(1,2,1),compass(x,y),title('Compass') subplot(1,2,2),feather(x,y),title('Feather') Feather1Compass90 1 0.50.860300.60.40.218000-0.2210240300330-0.4-0.6-0.8-1051015120150270图 6.4-7
6.4.1.6 Voronoi图和三角剖分
【例6.4.1.6-1】用Voronoi多边形勾画每个点的最近邻范围。Voronoi多边形在计算几何、模式识别中有重要应用。从本例图6.4-8中,可以看到,三角形顶点所在多边形的三条公共边是剖分三角形边的垂直平分线。
clf;rand('state',111)
n=30;A=rand(n,1)-0.5;B=rand(n,1)-0.5; T=delaunay(A,B); T=[T T(:,1)]; voronoi(A,B)
hold on;axis square
fill(A(T(10,:)),B(T(10,:)),'y'); voronoi(A,B)
17
0.40.30.20.10-0.1-0.2-0.3-0.4-0.3-0.2-0.100.10.20.30.4图 6.4-8
6.4.1.7 彩带图ribbon
【例6.4.1.7-1】用彩带绘图指令ribbon ,绘制归化二阶系统G?1在不同?值2s?2?s?1时的阶跃响应,如图6.4-9所示。对于本例程序,有以下几点值得注意:(1)程序中使用了Control Toolbox中的两个指令tf 和step 。这tf 是一个“对象”。(2)本例构作的S是一个单输入8输出系统,作用于该S的step指令也将在一次调用中产生8个子系统的阶跃响应。(3)在下段程序运行后,有兴趣的读者可显示S ,以观察系统是如何描写的。(4)本例为了得到较好的表现效果,采用了视角、明暗、色图、光照控制。(5)为使程序有一定通用性,图例采用元胞数组生成。(6)本例产生的图6.4.1.7-1中,除“t?”外,所有标识都是由下段指令产生的。(7)“t?”中的斜向箭头无法由指令生成,而是直接通过“图形窗”编辑实现的。(8)本例程序有通用性。只要修改第<2>条指令对阻尼系数的设定,就可获得相应的彩带图形。
clear,zeta2=[0.1 0.2 0.3 0.4 0.5 0.6 0.8 1.0]; %<2> n=length(zeta2);for k=1:n;Num{k,1}=1;Den{k,1}=[1 2*zeta2(k) 1];end S=tf(Num,Den); t=(0:0.4:30)'; [Y,x]=step(S,t);
tt=t*ones(size(zeta2)); ribbon(tt,Y,0.4) %
view([150,50]),shading interp,colormap(jet)% light,lighting phong,box on %
for k=1:n;str_lgd{k,1}=num2str(zeta2(k));end,legend(str_lgd) str1='\\itG = (s^{2} + 2\\zetas + 1)^{-1}'; str2='\\fontsize{16}\\fontname{隶书}取不同'; str3='{\\fontsize{10}\\it\\zeta}';
str4='\\fontsize{16}\\fontname{隶书}时的阶跃响应';
title([str1,str2,str3,str4]),zlabel('\\ity(\\zeta,t) \\rightarrow')
18
图 6.4--9
6.4.1.8 离散杆图stem , stem3
【例6.4.1.8-1】本例表现一个离散方波的快速Fourier变换的幅频。本例左图用极坐标指令polar绘出,右图用三维离散杆图指令stem3 绘出。
th = (0:127)/128*2*pi; rho=ones(size(th));
x = cos(th);y = sin(th);
f = abs(fft(ones(10,1),128)); rho=ones(size(th))+f';
subplot(1,2,1),polar(th,rho,'r')
subplot(1,2,2),stem3(x,y,f','d','fill') view([-65 30]) 12015090 20 1060301081800642010-1-101210240300330270图 6.4-10
19
6.4.1.9 二维半图指令pcolor, contour, contourf
【例6.4.1.9-1】本例重点演示所谓“二维半”指令:伪彩图pcolor ;等位线指令contour、 contourf;等位线标高指令 clabel 的配合使用和区别。练习本例时注意:(1)本例等位线指令中的第4输入宗量n设定高度的等级数,第5输入宗量设定等位线的线型、色彩。(2)左右两图的标高方法不同。左图的标识以“+”引导,水平放置。右图沿线布置。这是由clabel的调用格式不同产生的。(3)左右两图色彩的形成方法不同,色彩效果也不同。(4)在左图中,colorbar画出一根垂直色标尺,而caxis决定该色标尺的刻度。
clf;clear;[X,Y,Z]=peaks(40); n=4;
subplot(1,2,1),pcolor(X,Y,Z) colormap jet,shading interp
hold on,C=contour(X,Y,Z,n,'k:'); clabel(C)
zmax=max(max(Z));zmin=min(min(Z));caxis([zmin,zmax]) colorbar
hold off,subplot(1,2,2)
[C,h,CF]=contourf(X,Y,Z,n,'k:'); clabel(C,h)
图 6.4-11
6.4.1.10 散点图scatter , scatter3 , plotmatrix
【例6.4.1.10-1】表现函数z?sinR,R?x2?y2。请注意本例中的3个指令:(1)散R点图指令scatter3 ,标志三维数据点。它的前三个输入宗量必须是同长的向量,如指令<5>。(2)带垂帘的网线图指令meshz ,它的调用格式与mesh没有什么不同。
x=3*pi*(-1:0.2:1);y=x;[X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps;Z=sin(R)./R; %<2> C=abs(del2(Z)); % meshz(X,Y,Z,C) %
hold on,scatter3(X(:),Y(:),Z(:),'filled') hold off,colormap(hot)
%<5>
20