实例30:立体透视(2)
function shili30
h0=figure('toolbar','none',...
'position',[200 150 450 250],...
'name','实例30');
[x,y,z]=meshgrid(-2:0.1:2,...
-2:0.1:2,...
-2:0.1:2);
v=x.*exp(-x.^2-y.^2-z.^2);
[dx,dy,dz]=cylinder;
slice(x,y,z,v,[-2 2],2,-2)
for i=-2:0.2:2
h=surface(dx+i,dy,dz);
rotate(h,[1 0 0],90)
xp=get(h,'xdata');
yp=get(h,'ydata');
zp=get(h,'zdata');
delete(h)
hold on
hs=slice(x,y,z,v,xp,yp,zp);
axis tight
xlim([-3 3])
view(-10,35)
drawnow
delete(hs)
hold off
end
实例31:表面图形
function shili31
h0=figure('toolbar','none',...
'position',[200 150 550 250],...
'name','实例31');
subplot(1,2,1)
x=rand(100,1)*16-8;
y=rand(100,1)*16-8;
r=sqrt(x.^2+y.^2)+eps;
z=sin(r)./r;
xlin=linspace(min(x),max(x),33);
ylin=linspace(min(y),max(y),33);
[X,Y]=meshgrid(xlin,ylin);
Z=griddata(x,y,z,X,Y,'cubic');
mesh(X,Y,Z)
axis tight
hold on
plot3(x,y,z,'.','Markersize',20)
subplot(1,2,2)
k=5;
n=2^k-1;
theta=pi*(-n:2:n)/n;
phi=(pi/2)*(-n:2:n)'/n;
X=cos(phi)*cos(theta);
Y=cos(phi)*sin(theta);
Z=sin(phi)*ones(size(theta));
colormap([0 0 0;1 1 1])
C=hadamard(2^k);
surf(X,Y,Z,C)
axis square
实例32:沿曲线移动的小球
h0=figure('toolbar','none',...
'position',[198 56 408 468],...
'name','实例32');
h1=axes('parent',h0,...
'position',[0.15 0.45 0.7 0.5],...
'visible','on');
t=0:pi/24:4*pi;
y=sin(t);
plot(t,y,'b')
n=length(t);
h=line('color',[0 0.5 0.5],...
'linestyle','.',...
'markersize',25,...
'erasemode','xor');
k1=uicontrol('parent',h0,...
'style','pushbutton',...
'position',[80 100 50 30],...
'string','开始',...
'callback',[...
'i=1;',...
'k=1;,',...
'm=0;,',...
'while 1,',...
'if k==0,',...
'break,',...
'end,',...
'if k~=0,',...
'set(h,''xdata'',t(i),''ydata'',y(i)),',...
'drawnow;,',...
'i=i+1;,',...
'if i>n,',...
'm=m+1;,',...
'i=1;,',...
'end,',...
'end,',...
'end']);
k2=uicontrol('parent',h0,...
'style','pushbutton',...
'position',[180 100 50 30],...
'string','停止',...
'callback',[...
'k=0;,',...
'set(e1,''string'',m),',...
'p=get(h,''xdata'');,',...
'q=get(h,''ydata'');,',...
'set(e2,''string'',p);,',...
'set(e3,''string'',q)']);
k3=uicontrol('parent',h0,...
'style','pushbutton',...
'position',[280 100 50 30],...
'string','关闭',...
'callback','close');
e1=uicontrol('parent',h0,...
'style','edit',...
'position',[60 30 60 20]);
t1=uicontrol('parent',h0,...
'style','text',...
'string','循环次数',...
'position',[60 50 60 20]);
e2=uicontrol('parent',h0,...
'style','edit',...
'position',[180 30 50 20]);
t2=uicontrol('parent',h0,...
'style','text',...
'string','终点的X坐标值',...
'position',[155 50 100 20]);
e3=uicontrol('parent',h0,...
'style','edit',...
'position',[300 30 50 20]);
t3=uicontrol('parent',h0,...
'style','text',...
'string','终点的Y坐标值',...
'position',[275 50 100 20]);
实例33:曲线转换按钮
h0=figure('toolbar','none',...
'position',[200 150 450 250],...
'name','实例33');
x=0:0.5:2*pi;
y=sin(x);
h=plot(x,y);
grid on
huidiao=[...
'if i==1,',...
'i=0;,',...
'y=cos(x);,',...
'delete(h),',...
'set(hm,''string'',''正弦函数''),',...
'h=plot(x,y);,',...
'grid on,',...
'else if i==0,',...
'i=1;,',...
'y=sin(x);,',...
'set(hm,''string'',''余弦函数''),',...
'delete(h),',...
'h=plot(x,y);,',...
'grid on,',...
'end,',...
'end'];
hm=uicontrol(gcf,'style','pushbutton',...
'string','余弦函数',...
'callback',huidiao);
i=1;
set(hm,'position',[250 20 60 20]);
set(gca,'position',[0.2 0.2 0.6 0.6])
title('按钮的使用')
hold on
实例34:栅格控制按钮
h0=figure('toolbar','none',...
'position',[200 150 450 250],...
'name','实例34');
x=0:0.5:2*pi;
y=sin(x);
plot(x,y)
huidiao1=[...
'set(h_toggle2,''value'',0),',...
'grid on,',...
];
huidiao2=[...
'set(h_toggle1,''value'',0),',...
'grid off,',...
];
h_toggle1=uicontrol(gcf,'style','togglebutton',...
'string','grid on',...
'value',0,...
'position',[20 45 50 20],...
'callback',huidiao1);
h_toggle2=uicontrol(gcf,'style','togglebutton',...
'string','grid off',...
'value',0,...
'position',[20 20 50 20],...
'callback',huidiao2);
set(gca,'position',[0.2 0.2 0.6 0.6])
title('开关按钮的使用')
实例35:编辑框的使用
h0=figure('toolbar','none',...
'position',[200 150 350 250],...
'name','实例35');
f='Please input the letter';
huidiao1=[...
'g=upper(f);,',...
'set(h2_edit,''string'',g),',...
];
huidiao2=[...
'g=lower(f);,',...
'set(h2_edit,''string'',g),',...
];
h1_edit=uicontrol(gcf,'style','edit',...
'position',[100 200 100 50],...
'HorizontalAlignment','left',...
'string','Please input the letter',...
'callback','f=get(h1_edit,''string'');',...
'background','w',...
'max',5,...
'min',1);
h2_edit=uicontrol(gcf,'style','edit',...
'HorizontalAlignment','left',...
'position',[100 100 100 50],...
'background','w',...
'max',5,...
'min',1);
h1_button=uicontrol(gcf,'style','pushbutton',...
'string','小写变大写',...
'position',[100 45 100 20],...
'callback',huidiao1);
h2_button=uicontrol(gcf,'style','pushbutton',...
'string','大写变小写',...
'position',[100 20 100 20],...
'callback',huidiao2);
实例36:弹出式菜单
h0=figure('toolbar','none',...
'position',[200 150 450 250],...
'name','实例36');
x=0:0.5:2*pi;
y=sin(x);
h=plot(x,y);
grid on
hm=uicontrol(gcf,'style','popupmenu',...
'string',...
'sin(x)|cos(x)|sin(x)+cos(x)|exp(-sin(x))',...
'position',[250 20 50 20]);
set(hm,'value',1)
huidiao=[...
'v=get(hm,''value'');,',...
'switch v,',...
'case 1,',...
'delete(h),',...
'y=sin(x);,',...
'h=plot(x,y);,',...
'grid on,',...
'case 2,',...
'delete(h),',...
'y=cos(x);,',...
'h=plot(x,y);,',...
'grid on,',...
'case 3,',...
'delete(h),',...
'y=sin(x)+cos(x);,',...
'h=plot(x,y);,',...
'grid on,',...
'case 4,',...
'delete(h),',...
'y=exp(-sin(x));,',...
'h=plot(x,y);,',...
'grid on,',...
'end'];
set(hm,'callback',huidiao)
set(gca,'position',[0.2 0.2 0.6 0.6])
title('弹出式菜单的使用')
实例37:滑标的使用
h0=figure('toolbar','none',...
'position',[200 150 450 250],...
'name','实例37');
[x,y]=meshgrid(-8:0.5:8);
r=sqrt(x.^2+y.^2)+eps;
z=sin(r)./r;
h0=mesh(x,y,z);
h1=axes('position',...
[0.2 0.2 0.5 0.5],...
'visible','off');
htext=uicontrol(gcf,...
'units','points',...
'position',[20 30 45 15],...
'string','brightness',...
'style','text');
hslider=uicontrol(gcf,...
'units','points',...
'position',[10 10 300 15],...
'min',-1,...
'max',1,...
'style','slider',...
'callback',...
'brighten(get(hslider,''value''))');
实例38:多选菜单
h0=figure('toolbar','none',...
'position',[200 150 450 250],...
'name','实例38');
[x,y]=meshgrid(-8:0.5:8);
r=sqrt(x.^2+y.^2)+eps;
z=sin(r)./r;
h0=mesh(x,y,z);
hlist=uicontrol(gcf,'style','listbox',...
'string','default|spring|summer|autumn|winter',...
'max',5,...
'min',1,...
'position',[20 20 80 100],...
'callback',[...
'k=get(hlist,''value'');,',...
'switch k,',...
'case 1,',...
'colormap default,',...
'case 2,',...
'colormap spring,',...
'case 3,',...
'colormap summer,',...
'case 4,',...
'colormap autumn,',...
'case 5,',...
'colormap winter,',...
'end']);
实例39:菜单控制的使用
h0=figure('toolbar','none',...
'position',[200 150 450 250],...
'name','实例39');
x=0:0.5:2*pi;
y=cos(x);
h=plot(x,y);
grid on
set(gcf,'toolbar','none')
hm=uimenu('label','example');
huidiao1=[...
'set(hm_gridon,''checked'',''on''),',...
'set(hm_gridoff,''checked'',''off''),',...
'grid on'];
huidiao2=[...
'set(hm_gridoff,''checked'',''on''),',...
'set(hm_gridon,''checked'',''off''),',...
'grid off'];
hm_gridon=uimenu(hm,'label','grid on',...
'checked','on',...
'callback',huidiao1);
hm_gridoff=uimenu(hm,'label','grid off',...
'checked','off',...
'callback',huidiao2);