您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > matlab教程详解(8)
1第九章句柄图形与第6章的高层指令相比,本章的内容更深入MATLAB可视化功能的内核。编写本章的目的有两个:一,使读者更深入地理解高层绘图指令,从而可绘制出更精细更生动更个性的图形;二,使读者能利用低层图形指令和图形对象属性开发专用绘图函数。本章在内容安排上有如下考虑:保证概念、结构和方法的完整性:本章的前6节内容按由表及里、由浅入深的原则系统阐述句柄图形体系、图形对象、属性和操作方法。突出要点、新点和难点:句柄图形体系有11个基本图形对象,每个对象的属性少则20几个,多则近百个。对此,MATLAB自带资料有详尽的文字说明。因此,本章只对最常用的、不可或缺的、以及较难掌握的内容进行说明。强调“可操作性”体现“范例引导概念”的本书宗旨:针对MATLAB自带资料缺少完整、可操作应用实例的弱点,本章设计了17个算例,其中9个精心设计的完整应用范例就占本章一半以上篇幅。读者通过阅读或操作这些范例,可掌握各指令、属性之间的有机配合,从而更具体更真切地理解句柄图形。在本章内容正式展开之前,先把MATLAB随带资料中涉及各对象属性的文件及查阅方法罗列如下。读者应重视这些最原始、最权威、最细节、任何其它书籍不能代替的资料。使用AdobeAcrobatReader阅读(或打印)以下PDF文件help\pdf_doc\matlab\graphg.pdf;help\pdf_doc\matlab\refbook.pdf,refbook2.pdf,refbook3.pdf;使用HelpNavigator/Browser帮助导航/浏览器或直接指令help查看有关图形对象的资料。如helpfigure可直接得到有关图对象的属性描述。利用get,set指令在MATLAB指令窗中,直接查询对象属性。本章内容已根据MATLAB6.5版中运行情况修正。但值得指出:MATLAB从5.x版向6.x版的升级对本章内容的扩展和影响很小。9.1句柄图形体系9.1.1图形对象、对象句柄和句柄图形树结构(1)图形对象(2)句柄(3)句柄图形的结构9.1.2对象属性(1)属性2(2)缺省属性9.2图形对象的操作9.2.1图形对象创建指令一览9.2.2对象句柄的获取方法9.2.2.1基本方法(1)从图形创建指令获得句柄(2)追溯法获取图柄(3)当前对象句柄的获取(4)根据对象特性获取句柄(5)根据对象“标签”获取句柄9.2.2.2句柄获取示例【例9.2.2.2-1】画网线图,并得相应句柄;追溯法找所在图形窗句柄;gcf和gca演示。(为省篇幅,图形略)clfreset;H_mesh=mesh(peaks(20))H_grand_parent=get(get(H_mesh,'Parent'),'Parent')disp('图柄轴柄'),disp([gcfgca])H_mesh=100.0016H_grand_parent=1图柄轴柄1.000099.0010【例9.2.2.2-2】低层指令绘图,获得句柄;获取同轴上字对象的句柄和相应对象类型。(为省篇幅,图形略)clfreset,t=(0:100)/100*2*pi;H_line=line('Xdata',t,'Ydata',sin(t))text(pi,0.8,'\fontsize{14}sin(t)')H_c=get(get(H_line,'parent'),'children')T=get(H_c,'Type')H_line=99.0011H_c=101.000599.0011T='text''line'【例9.2.2.2-3】findobj指令的使用。(为省篇幅,图形略)clfreset,t=(0:pi/100:2*pi)';tt=t*[11];yy=sin(tt)*diag([0.51]);plot(tt,yy),Hb=findobj(gca,'Color','b')Hb=99.001239.3对象属性的获取和设置9.3.1创建对象时设置属性9.3.2get和set9.3.3对象属性的缺省设置和查询9.3.4属性查询和设置示例【例9.3.4-1】创建二维图形时,分别用元胞数组和构架数组设置对象属性。clfreset,x=0:pi/12:2*pi;PN1={'Color','LineWidth','Marker'};PV1={[100],5,'d'};plot(sin(x),cos(x),PN1,PV1)axissquareoffPS.Color=[0.70.70];PS.LineWidth=2;line(sin(7*x),cos(7*x),PS);图9.3-1【例9.3.4-2】本例演示:影响line或plot画线时线型和色彩的“父”对象设置。出于篇幅考虑,本节算例的图形都被删去。如要观察指令产生的图形,请读者自己运行相应指令。(1)t=(0:pi/50:2*pi)';k=0.4:0.1:1;Y=cos(t)*k;line(t,Y,'Color',[100],'LineStyle','-.')%2(2)clfresetset(gca,'ColorOrder',[000;0.70.70.7],'LineStyle','-|:')%4line(t,Y)(3)clfresetset(gcf,'DefaultAxesLineStyleOrder','-|:');%8set(gcf,'DefaultAxesColorOrder',[100;001]);line(t,Y)49.4为低层指令绘图准备图/轴9.4.1'NextPlot'属性9.4.2准备图/轴的简捷指令newplot9.4.3高层绘图文件的形成【例9.4.3-1】高层作图函数surf.m文件与底层作图指令surface的关系。[surf.m]functionh=surf(varargin)cax=newplot;ifnargin==0error('Notenoughinputarguments.')elseifnargin==1ifmin(size(varargin{1}))==1error('Inputargumentmustbeamatrixnotavectororascalar')elsehh=surface(varargin{1});endelsehh=surface(varargin{:});endnext=lower(get(cax,'NextPlot'));if~isholdview(3)gridonendifnargout==1h=hh;end9.5图形窗的色彩资源和光标属性9.5.1色彩资源9.5.2光标指针59.5.2.1预定义的指针形状9.5.2.2自定义指针形状9.6轴对象9.6.1轴位框的几何属性和多轴位框9.6.2图形名和坐标轴名的句柄操作9.6.3轴刻度的属性控制9.6.4坐标轴尺度、方向、位置属性9.6.5照相机属性9.7句柄图形应用专题9.7.1光标形状的自制【例9.7.1-1】自制光标指针形状(1)bdw=0.01;tpw=0.15;pos=[1/2+bdw,2/3+bdw,1/2-2*bdw,1/3-bdw-tpw];%3figure('Units','normalized','Position',pos,'Color',[0.9,0.65,0])%4set(gcf,'Name','试验窗')%5(2)步骤一:图9.7-1步骤二:P=ones(16,16)*NaN;P(1,5)=1;P(2:14,4)=1;P(15,5)=1;P(16,6:11)=1;P(15,12)=1;P(9:14,13)=1;6P(2:9,6)=1;P(9,7)=1;P(8,8)=1;P(9,9)=1;P(8,10)=1;P(9,11)=1;P(8,12)=1;P(2:14,5)=2;P(10:15,6:11)=2;P(9,8)=2;P(9,10)=2;P(9:14,12)=2;set(gcf,'Pointer','Custom','PointerShapeCData',P,'PointerShapeHotSpot',[2,5])图9.7-29.7.2任意布置子图和轴外注释【例9.7.2-1】本例演示:axes轴位框设计、rectangle的运用、及轴外注释。所谓轴外注释,实际上是使用了两个轴位框。一个轴位框充满全部图形窗,其坐标框被隐去,而只写注释文字。而另一个比较小的轴位框用于绘图。这样从外表看去,注释就处于那小轴位框的外部。clf%zeta2=[0.20.40.60.81.0];n=length(zeta2);fork=1:n;Num{k,1}=1;Den{k,1}=[12*zeta2(k)1];endS=tf(Num,Den);t=(0:0.4:20)';[Y,x]=step(S,t);tt=t*ones(size(zeta2));%clfreset,H=axes('Position',[0,0,1,1],'Visible','off');%str{1}='\fontname{隶书}二阶系统阶跃响应';%11str{2}='y(t)=1-\beta^{-1}e^{-\zetat}sin(\betat+\theta)';str{3}='';str{4}='\fontname{隶书}其中:';str{5}='\beta=(1-\zeta^{2})^{0.5}';str{6}='\theta=arctg(\beta/\zeta)';str{7}='\zeta=.2,.4,.6,.8,1';%15%set(gcf,'CurrentAxes',H)%18text(0.01,0.73,str,'FontSize',12)%19h1=axes('Position',[0.45,0.45,0.5,0.5]);ribbon(tt,Y,0.4)%set(h1,'XTickLabelMode','manual','XTickLabel','0|0.4|0.8|1.2');%23set(h1,'ZTickLabel','0|1.0|2.0');%24%set(get(h1,'XLabel'),'String','\zeta\rightarrow','Rotation',17.5)set(get(h1,'YLabel'),'String','\leftarrowt','Rotation',-25)%27set(get(h1,'Zlabel'),'String','y\rightarrow')h2=axes('Position',[0.03,0.08,0.27,0.27]);%plot(tt,Y)%%h3=axes('Position',[0.37,0.04,0.63,0.32]);%set(h3,'Xlim',[0,1.2],'Ylim',[0,0.5])%set(h3,'DataAspectRatio',[111])%set(h3,'ColorOrder',[0,0,0])%7set(h3,'Visible','off')%hh1=rectangle('Position',[0.5,0.2,0.4,0.2],'Curvature',[0,0]);%37hh2=rectangle('Position',[0.2,0.26,0.08,0.08],'Curvature',[1,1]);%38xx1=0.05:0.01:0.2;xx2=0.28:0.02:0.5;xx3=0.9:0.02:1.1;xx4=0.24:0.02:1;yy5=0.1:0.02:0.26;yy6=0.1:0.02:0.3;yy1=0.3*ones(size(xx1));yy2=0.3*ones(size(xx2));yy3=0.3*ones(size(xx3));yy4=0.1*ones(size(xx4));xx5=0.24*ones(size(yy5));xx6=ones(size(yy6));line(xx1,yy1)
本文标题:matlab教程详解(8)
链接地址:https://www.777doc.com/doc-2887537 .html