matlab入门经典教程第九章 句柄图形.docx
- 文档编号:8486658
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:20
- 大小:537.82KB
matlab入门经典教程第九章 句柄图形.docx
《matlab入门经典教程第九章 句柄图形.docx》由会员分享,可在线阅读,更多相关《matlab入门经典教程第九章 句柄图形.docx(20页珍藏版)》请在冰豆网上搜索。
matlab入门经典教程第九章句柄图形
第九章句柄图形
与第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)缺省属性
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.0016
H_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.0011
H_c=
101.0005
99.0011
T=
'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.0012
9.3对象属性的获取和设置
9.3.1创建对象时设置属性
9.3.2get和set
9.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)
axissquareoff
PS.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)
clfreset
set(gca,'ColorOrder',[000;0.70.70.7],'LineStyle','-|:
')%<4>
line(t,Y)
(3)
clfreset
set(gcf,'DefaultAxesLineStyleOrder','-|:
');%<8>
set(gcf,'DefaultAxesColorOrder',[100;001]);
line(t,Y)
9.4为低层指令绘图准备图/轴
9.4.1'NextPlot'属性
9.4.2准备图/轴的简捷指令newplot
9.4.3高层绘图文件的形成
【例9.4.3-1】高层作图函数surf.m文件与底层作图指令surface的关系。
[surf.m]
functionh=surf(varargin)
cax=newplot;
ifnargin==0
error('Notenoughinputarguments.')
elseifnargin==1
ifmin(size(varargin{1}))==1
error('Inputargumentmustbeamatrixnotavectororascalar')
else
hh=surface(varargin{1});
end
else
hh=surface(varargin{:
});
end
next=lower(get(cax,'NextPlot'));
if~ishold
view(3)
gridon
end
ifnargout==1
h=hh;
end
9.5图形窗的色彩资源和光标属性
9.5.1色彩资源
9.5.2光标指针
9.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];%<3>
figure('Units','normalized','Position',pos,'Color',[0.9,0.65,0])
%<4>
set(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;
P(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-2
9.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];end
S=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{隶书}二阶系统阶跃响应';%<11>
str{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)%<18>
text(0.01,0.73,str,'FontSize',12)%<19>
h1=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');%<23>
set(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)%<27>
set(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])%
set(h3,'Visible','off')%
hh1=rectangle('Position',[0.5,0.2,0.4,0.2],'Curvature',[0,0]);
%<37>
hh2=rectangle('Position',[0.2,0.26,0.08,0.08],'Curvature',[1,1]);
%<38>
xx1=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);line(xx2,yy2);line(xx3,yy3);line(xx4,yy4);
line(xx5,yy5);line(xx6,yy6)
line(0.17,0.3,'Marker','>','MarkerFaceColor','k')
line(0.47,0.3,'Marker','>','MarkerFaceColor','k')
line(1.1,0.3,'Marker','>','MarkerFaceColor','k')
line(0.24,0.23,'Marker','^','MarkerFaceColor','k')
line(0.17,0.35,'Marker','+')
text(0.27,0.23,'-')
text(0.05,0.35,'u(t)')
text(1,0.35,'y(t)')
text(0.6,0.26,'s{^2}+2{\zeta}s');
xx7=0.56:
0.02:
0.84;yy7=0.3*ones(size(xx7));line(xx7,yy7)
text(0.68,0.35,'1')
图9.7-3
9.7.3制作个性化双坐标系
【例9.7.3-1】制作一个双坐标系用来表现高压和低温两个不同量的过渡过程。
tp=(0:
100)/100*5;yp=8+4*(1-exp(-0.8*tp).*cos(3*tp));
tt=(0:
500)/500*40;yt=120+40*(1-exp(-0.05*tt).*cos(tt));
%
clfreset,h_ap=axes('Position',[0.13,0.13,0.7,0.75]);%<4>
set(h_ap,'Xcolor','b','Ycolor','b','Xlim',[0,5],'Ylim',[0,15]);
nx=10;ny=6;%<6>
pxtick=0:
((5-0)/nx):
5;pytick=0:
((15-0)/ny):
15;%<7>
set(h_ap,'Xtick',pxtick,'Ytick',pytick,'Xgrid','on','Ygrid','on')
h_linet=line(tp,yp,'Color','b');%<9>
set(get(h_ap,'Xlabel'),'String','时间\rightarrow(分)')
set(get(h_ap,'Ylabel'),'String','压力\rightarrow(\times10^{5}Pa)')
h_at=axes('Position',get(h_ap,'Position'));%<12>
set(h_at,'Color','none','Xcolor','r','Ycolor','r');%<13>
set(h_at,'Xaxislocation','top')%<14>
set(h_at,'Yaxislocation','right','Ydir','rev')%<15>
set(get(h_at,'Xlabel'),'String','\fontsize{15}\fontname{隶书}时间\rightarrow(分)')
set(get(h_at,'Ylabel'),'String','({\circ}C)\fontsize{15}\leftarrow\fontname{隶书}零下温度')
set(h_at,'Ylim',[0,210])%<18>
line(tt,yt,'Color','r','Parent',h_at)%<19>
xpm=get(h_at,'Xlim');%<20>
txtick=xpm
(1):
((xpm
(2)-xpm
(1))/nx):
xpm
(2);%<21>
tytick=0:
((210-0)/ny):
210;%<22>
set(h_at,'Xtick',txtick,'Ytick',tytick)%<23>
图9.7-4
9.7.4连续变焦和飞驰图形
【例9.7.4-1】通过CameraPosition设置的不断变化,使地球迎面飞来,贯穿而过,从地球另一面飞离而去。
但在整个飞行过程中,相机镜头始终对着地球。
(1)
[earth_zzy.m]
functionearth_zzy(ap)
%erath_zyy.m
%
%
loadtopo
figure('colormap',topomap1,'Color',[.8.8.8]);%<6>
[x,y,z]=sphere(50);
azzy.DataAspectRatio=[111];azzy.PlotBoxAspectRatioMode='auto';
fa=axes('Visible','off',azzy);
szzy1.AmbientStrength=0.1;szzy1.DiffuseStrength=1;
szzy1.SpecularColorReflectance=.5;szzy1.SpecularExponent=20;
szzy1.SpecularStrength=1;
surface(x,y,z,szzy1,'FaceLighting','phong','FaceColor','texture',...
'EdgeColor','none','Cdata',topo,'Parent',fa);%<13>
ifap==1,set(fa,'CameraViewAngle',0.1*get(fa,'CameraViewAngle'));end
light('position',[-101],'color',[0.510.5]);
light('position',[-1.50.5-0.5],'color',[.6.2.2]);
light('Position',[1.51.5-1]);
light('Position',[0-1.50],'color',[0.60.61]);
view([-1726])
(2)
earth_zzy(0)
图9.7-5
(3)
[fly_zzy.m]
%fly_zzy.m
earth_zzy(0)%<2>
set(gca,'CameraViewAngleMode','manual')%<3>
pos=get(gca,'CameraPosition');
tar=get(gca,'CameraTarget');
kk=(0:
2:
40)/15;nk=length(kk);%<6>
fori=1:
nk-1
newpos=pos-kk(i)*(pos-tar);%<8>
set(gca,'CameraPosition',newpos)%<9>
drawnow%<10>
end
(4)
fly_zzy
【例9.7.4-2】利用属性CameraViewAngle产生飞驰效应。
本例也用地球图形演示。
在相机视角连续变化下,地球飞离,直到消失。
[fly_zzy2.m]
%fly_zzy2.m
earth_zzy
(1)
set(gca,'CameraViewAngleMode','manual')
ang=get(gca,'CameraViewAngle');
kk=(1:
50)/50;nk=length(kk);
fori=1:
nk
newang=ang+kk(i)*(180-ang);
set(gca,'CameraViewAngle',newang)
drawnow
end
9.7.5实时动画
9.7.5.1擦除属性'EraseMode'
9.7.5.2屏幕刷新指令drawnow
9.7.5.3动画制作示例
【例9.7.5.3-1】制作红色小球沿一条带封闭路径的下旋螺线运动的实时动画。
(1)
[anim_zzy1.m]
functionf=anim_zzy1(K,ki)
%anim_zzy1.m
%
%
t1=(0:
1000)/1000*10*pi;x1=cos(t1);y1=sin(t1);z1=-t1;
t2=(0:
10)/10;x2=x1(end)*(1-t2);y2=y1(end)*(1-t2);z2=z1(end)*ones(size(x2));
t3=t2;z3=(1-t3)*z1(end);x3=zeros(size(z3));y3=x3;
t4=t2;x4=t4;y4=zeros(size(x4));z4=y4;
x=[x1x2x3x4];y=[y1y2y3y4];z=[z1z2z3z4];
plot3(x,y,z,'b'),axisoff
%
h=line('Color',[100],'Marker','.','MarkerSize',40,'EraseMode','xor');
%
n=length(x);i=1;j=1;
while1
set(h,'xdata',x(i),'ydata',y(i)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab入门经典教程第九章 句柄图形 matlab 入门 经典 教程 第九 句柄 图形