Matlab入门到精通ch10.docx

上传人:b****4 文档编号:24904140 上传时间:2023-06-02 格式:DOCX 页数:26 大小:403.50KB
下载 相关 举报
Matlab入门到精通ch10.docx_第1页
第1页 / 共26页
Matlab入门到精通ch10.docx_第2页
第2页 / 共26页
Matlab入门到精通ch10.docx_第3页
第3页 / 共26页
Matlab入门到精通ch10.docx_第4页
第4页 / 共26页
Matlab入门到精通ch10.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

Matlab入门到精通ch10.docx

《Matlab入门到精通ch10.docx》由会员分享,可在线阅读,更多相关《Matlab入门到精通ch10.docx(26页珍藏版)》请在冰豆网上搜索。

Matlab入门到精通ch10.docx

Matlab入门到精通ch10

10句柄图形

与第7章的高层指令相比,本章的内容更深入MATLAB可视化功能的内核。

编写本章的目的有两个:

一,使读者更深入地理解高层绘图指令,从而可绘制出更精细更生动更个性的图形;二,使读者能利用低层图形指令和图形对象属性开发专用绘图函数。

本章在内容安排上有如下考虑:

●保证概念、结构和方法的完整性:

本章的前6节内容按由表及里、由浅入深的原则系统阐述句柄图形体系、图形对象、属性和操作方法。

●突出要点、新点和难点:

句柄图形体系有11个基本图形对象,每个对象的属性少则20几个,多则近百个。

对此,MATLAB自带资料有详尽的文字说明。

因此,本章只对最常用的、不可或缺的、MATLAB老版本中所没有的、以及较难掌握的内容进行说明。

●强调“可操作性”体现“范例引导概念”的本书宗旨:

针对MATLAB自带资料缺少完整、可操作应用实例的弱点,本章设计了17个算例,其中9个精心设计的完整应用范例就占本章一半以上篇幅。

读者通过阅读或操作这些范例,可掌握各指令、属性之间的有机配合,从而更具体更真切地理解句柄图形。

在本章内容正式展开之前,先把MATLAB随带资料中涉及各对象属性的文件及查阅方法罗列如下。

读者应重视这些最原始、最权威、最细节、任何其它书籍不能代替的资料。

●使用AdobeAcrobatReader阅读(或打印)以下PDF文件

help\pdf_doc\matlab\graphg.pdf;

help\pdf_doc\matlab\ref\refbook2.pdf;

●使用NetscapeNavigator或MicrosoftInternetExplorer打开以下引导文件

help\techdoc\infotool\hgprop\doc_frame.htm

●使用指令help或helpwindow图形用户界面查看有关对象的资料。

如helpfigure可直接得到有关图对象的属性描述。

●利用get,set指令在MATLAB指令窗中,直接查询对象属性。

10.1句柄图形体系

10.1.1图形对象、对象句柄和句柄图形树结构

10.1.2对象属性

10.2图形对象的操作

10.2.1图形对象创建指令一览

10.2.2对象句柄的获取方法

10.2.2.1基本方法

10.2.2.2句柄获取示例

【*例10.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=

73.0135

H_grand_parent=

1

图柄轴柄

1.000072.0051

图10.2.2.2_1

【*例10.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=

72.0052

H_c=

74.0116

72.0052

T=

'text'

'line'

图10.2.2.2_2

【*例10.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=

72.0050

图10.2.2.2_3

10.3对象属性的获取和设置

10.3.1创建对象时设置属性

10.3.2get和set

10.3.3对象属性的缺省设置和查询

10.3.4属性查询和设置示例

【*例10.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)%高层指令,元胞数组属性对设置

axissquare

PS.Color=[0.70.70];PS.LineWidth=2;%构架数组属性

line(sin(7*x),cos(7*x),PS);%低层指令,构架数组属性设置。

图10.3.4-1创建对象时设置属性的二维图形

【例10.3.4-2】本例演示:

影响line或plot画线时线型和色彩的“父”对象设置。

(1)指令中直接指定线型或/和颜色:

用“红虚点线”绘所有曲线。

clfreset;t=(0:

pi/50:

2*pi)';k=0.4:

0.1:

1;Y=cos(t)*k;

line(t,Y,'Color',[100],'LineStyle','-.')%<2>

图10.3.4_2_1

(2)轴对象属性'LineStyle'和'ColorOrder'的影响:

以“黑实—黑虚—灰实—灰虚”的循环次序绘线。

clfreset

set(gca,'ColorOrder',[000;0.70.70.7],'LineStyle','-|:

')%<4>

line(t,Y)

图10.3.4_2_2

(3)在“图对象”上,对轴的缺省属性'DefaultAxesLineStyleOrder'和'DefaultAxesColorOrder'设置所产生的影响:

以“红实—蓝实—红虚—蓝虚”的循环次序绘线。

clfreset

set(gcf,'DefaultAxesLineStyleOrder','-|:

');

set(gcf,'DefaultAxesColorOrder',[100;001]);

line(t,Y)

图10.3.4_2_3

10.4为低层指令绘图准备图/轴

10.4.1'NextPlot'属性

10.4.2准备图/轴的简捷指令newplot

10.4.3高层绘图文件的形成

【例10.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%假如当前图形不处在holdon状态为真

view(3)%在默认视点观看三维图形

gridon%画分格线

end

ifnargout==1

h=hh;%输出宗量数为1时,将surface的句柄赋给变量h。

end

 

10.5图形窗的色彩资源和光标属性

10.5.1色彩资源

10.5.2光标指针

10.5.2.1预定义的指针形状

10.5.2.2自定义指针形状

10.6轴对象

10.6.1轴位框的几何属性和多轴位框

10.6.2图形名和坐标轴名的句柄操作

10.6.3轴刻度的属性控制

10.6.4坐标轴尺度、方向、位置属性

10.6.5照相机属性

10.7句柄图形应用专题

10.7.1光标形状的自制

【*例10.7.1-1】自制光标指针形状(本例只能在指令窗中运行、体验)。

(1)运行以下指令,在屏幕的右上方(即第一象限)创建一个背景为“橘黄”色的图形窗,窗名为“试验窗”。

(图形窗的外形见图10.7.1-1-2)

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)为该图形窗制作一个“手指”状光标指针

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])

图10.7.1-1-2自定义窗名、背景色和光标形状的图形窗

 

10.7.2任意布置子图和轴外注释

【*例10.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));%为画彩带图,生成与函数值Y维数相同的时间矩阵。

%产生全窗轴位框,并隐去坐标轴

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>

%使H句柄轴对象成为当前轴,然后注释多行文字。

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)%在h1轴位框中画彩带图

%对X轴、Z轴重标刻度值

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)%在h2轴对象上画二维图

%在右下方画系统方块框图

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')

图10.7.2-1轴属性设置的综合演示

10.7.3制作个性化双坐标系

【*例10.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>

图10.7.3-1双坐标系图形

10.7.4连续变焦和飞驰图形

【*例10.7.4-1】通过CameraPosition设置的不断变化,使地球迎面飞来,贯穿而过,从地球另一面飞离而去。

但在整个飞行过程中,相机镜头始终对着地球。

(1)编写三维地球生成程序earth_zzy.m函数文件

[earth_zzy.m]

functionearth_zzy(ap)

%erath_zyy.m绘制三维地球

%ap取0时,相机视角采用自动设置;

%取1时,相机视角取缺省值的十分之一,因此地球显得较大。

loadtopo%装载图象topo和相应的图象色图topomap1

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)运行erath_zzy可以画出如下三维地球图。

(在Notebook和指令窗中均可运行)

earth_zzy(0)

图10.7.4-1三维地球图形

(3)编写飞驰程序fly_zzy.m脚本文件

[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(k

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1