第九章句柄图形Word文档格式.docx
《第九章句柄图形Word文档格式.docx》由会员分享,可在线阅读,更多相关《第九章句柄图形Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
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
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={'
'
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:
k=0.4:
0.1:
1;
Y=cos(t)*k;
line(t,Y,'
[100],'
LineStyle'
-.'
)%<
2>
(2)
clfreset
set(gca,'
ColorOrder'
[000;
0.70.70.7],'
-|:
4>
line(t,Y)
(3)
set(gcf,'
DefaultAxesLineStyleOrder'
);
%<
8>
set(gcf,'
DefaultAxesColorOrder'
[100;
001]);
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
Inputargumentmustbeamatrixnotavectororascalar'
else
hh=surface(varargin{1});
end
hh=surface(varargin{:
});
next=lower(get(cax,'
));
if~ishold
view(3)
gridon
ifnargout==1
h=hh;
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,'
[0.9,0.65,0])
%<
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;
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;
14,5)=2;
P(10:
15,6:
11)=2;
P(9,8)=2;
P(9,10)=2;
14,12)=2;
Pointer'
Custom'
PointerShapeCData'
P,'
PointerShapeHotSpot'
[2,5])
9.7.2任意布置子图和轴外注释
【例9.7.2-1】本例演示:
axes轴位框设计、rectangle的运用、及轴外注释。
所谓轴外注释,实际上是使用了两个轴位框。
一个轴位框充满全部图形窗,其坐标框被隐去,而只写注释文字。
而另一个比较小的轴位框用于绘图。
这样从外表看去,注释就处于那小轴位框的外部。
clfzeta2=[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('
[0,0,1,1],'
Visible'
off'
%
11>
15>
18>
19>
24>
27>
str{1}='
\fontname{隶书}二阶系统阶跃响应'
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'
set(gcf,'
CurrentAxes'
H)
text(0.01,0.73,str,'
FontSize'
12)h1=axes('
[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'
set(get(h1,'
XLabel'
String'
\zeta\rightarrow'
Rotation'
17.5)set(get(h1,'
YLabel'
\leftarrowt'
-25)set(get(h1,'
Zlabel'
y\rightarrow'
)h2=axes('
[0.03,0.08,0.27,0.27]);
plot(tt,Y)%
h3=axes('
[0.37,0.04,0.63,0.32]);
set(h3,'
Xlim'
[0,1.2],'
Ylim'
[0,0.5])%
DataAspectRatio'
[111])%
[0,0,0])%
)%hh1=rectangle('
[0.5,0.2,0.4,0.2],'
Curvature'
[0,0]);
%<
37>
hh2=rectangle('
[0.2,0.26,0.08,0.08],'
[1,1]);
38>
xx1=0.05:
0.01:
0.2;
xx2=0.28:
0.02:
0.5;
xx3=0.9:
1.1;
xx4=0.24:
yy5=0.1:
0.26;
yy6=0.1:
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,'
>
MarkerFaceColor'
k'
)line(0.47,0.3,'
)line(1.1,0.3,'
)line(0.24,0.23,'
^'
line(0.17,0.35,'
+'
)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.84;
yy7=0.3*ones(size(xx7));
line(xx7,yy7)text(0.68,0.35,'
1'
图9.7-3
二阶系统阶跃响应
1.0
-1-zt
y(t)=1-
其中:
b-1e-ztsin(
bt+q)
b=(1-
20.5z)
?
2.0
q=arctg(
b/z)
z=.2,.4,
.6,.8,1
20
y(t)
-
2
s+2zs
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('
[0.13,0.13,0.7,0.75]);
set(h_ap,'
Xcolor'
Ycolor'
[0,5],'
[0,15]);
nx=10;
ny=6;
pxtick=0:
((5-0)/nx):
5;
pytick=0:
((15-0)/ny):
15;
Xtick'
pxtick,'
Ytick'
pytick,'
Xgrid'
on'
Ygrid'
)h_linet=line(tp,yp,'
set(get(h_ap,'
Xlabel'
set(get(h_ap,'
Ylabel'
h_at=axes('
get(h_ap,'
));
set(h_at,'
none'
r'
set(h_at,'
Xaxislocation'
top'
)set(h_at,'
Yaxislocation'
right'
Ydir'
rev'
)set(get(h_at,'
\fontsize{15}\fontname{\rightarrow(分)'
\fontname{隶书}零下温度'
[0,210])line(tt,yt,'
h_at)
时间\rightarrow(分)'
)压力\rightarrow(\times10^{5}Pa)'
({\circ}C)\fontsize{15}
6>
7>
9>
12>
13>
14>
}时间
\leftarrow
21>
22>
00.5
11.522.533.544.5
xpm=get(h_at,'
txtick=xpm
(1):
((xpm
(2)-xpm
(1))/nx):
xpm
(2);
tytick=0:
((210-0)/ny):
210;
txtick,'
tytick)
度温下零?
)C
004
210
5
时时?
时时时
图9.7-4
9.7.4连续变焦和飞驰图形
【例9.7.4-1】通过CameraPosition设置的不断变化,使地球迎面飞来,贯穿而过,从地球另一面飞离而去。
但在整个飞行过程中,相机镜头始终对着地球。
[earth_zzy.m]
functionearth_zzy(ap)
%erath_zyy.m
%loadtopo
figure('
colormap'
topomap1,'
[.8.8.8]);
%<
[x,y,z]=sphere(50);
spectRatio=[111];
oxAspectRatioMode='
auto'
;
fa=axes('
'
azzy);
ntStrength=0.1;
seStrength=1;
larColorReflectance=.5;
larExponent=20;
larStrength=1;
FaceLighting'
phong'
FaceColor'
texture'
view([-1726])
(2)earth_zzy(0)
[fly_zzy.m]
10>
%fly_zzy.mearth_zzy(0)set(gca,'
CameraViewAngleMode'
)pos=get(gca,'
CameraPosition'
);
tar=get(gca,'
CameraTarget'
kk=(0:
2:
40)/15;
nk=length(kk);
fori=1:
nk-1
newpos=pos-kk(i)*(pos-tar);
set(gca,'
newpos)drawnow
4)
fly_zzy
【例9.7.4-2】利用属性CameraViewAngle产生飞驰效应。
本例也用地球图形演示。
在相机视角连续变化下,地球飞离,直到消失。
[fly_zzy2.m]
%fly_zzy2.mearth_zzy
(1)set(gca,'
)ang=get(gca,'
CameraViewAngle'
kk=(1:
50)/50;
nknewang=ang+kk(i)*(180-ang);
set(gca,'
newang)drawnow
9.7.5实时动画
9.7.5.1擦除属性'
EraseMode'
9.7.5.2屏幕刷新指令drawnow
9.7.5.3动画制作示例
【例9.7.5.3-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,'
),axisoff
xor'
h=line('
[100],'
.'
MarkerSize'
40,'
n=length(x);
i=1;
j=1;
while1
set(h,'
xdata'
x(i),'
ydata'
y(i),
zdata'
z(i));
drawnow;
<
pause(0.0005)
i=i+1;
ifnargin==2&
nargout==1
if(i==ki&
j==1);
f=getframe(gcf);
25>
ifi>
n
j=j+1;
ifj>
K;
break;
endendend
(2)f=anim_zzy1(2,450);
(3)image(f.cdata),axisoff
图9.7-6
9.7.6surface指令衍生不同曲面
【例9.7.6-1】演示高层指令mesh,surf等指令是如何由surface衍生而得。
clfreset,t=(0:
20)/20;
r=2.5-cos(2*pi*t);
[x,y,z]=cylinder(r,40);
fc=get(gca,'
color'
h=surface(x,y,z,'
fc,'
EdgeColor'
flat'
EdgeLighting'
view(3);
gridon;
axisoff
图9.