在Matlab中,所有的图形操作都是针对图形对象而言的,如坐标轴、曲线、曲面、文本等
每个对象在创建时,就被赋予唯一的标识,这种标识就是该图形对象的句柄。
以后可以通过句柄访问该图形对象的属性。
关于对象精辟介绍:Matlab的图形系统是面向图形对象的,对象是用来描述客观事物的实体,是构成系统的基本单位。图形对象是用于显示图形和用户界面的基本要素。
(1)句柄的概念
在Matlab中,用句柄来标识对象,通过句柄来访问相应对象的属性。
%绘制多个图形,并保存图形句柄
clear
clc
t = 0:pi/10:2*pi;
h1 = plot3(t+pi,t-2*pi,sin(t),'r'); %h1 是曲线的句柄
hold on;
[x,y] = meshgrid(t);
z = sin(x);
h2 = mesh(t-2*pi,t+pi,z); %h2 是曲面的句柄
[x3,y3,z3] =cylinder(t);
h3 = surf(x3,y3,z3); %h3 是圆锥的句柄
(2)访问图形对象
对象句柄.属性名
%绘制图形,并访问图形对象
x = 0:pi/10:2*pi;
y = sin(x);
h0 = plot(x,y);
grid on;
h0.Color
h0.LineWidth = 2;
h0.LineStyle = '-.';
(3)获取特定图形对象句柄的函数
gcf:获取当前图形窗口的句柄。
gca:获取当前坐标轴的句柄。
gco:获取最近被选中的图形对象的句柄。
findobj:按照指定的属性来获取图形对象的句柄。
(1)图形对象的常用公共属性
Children属性:该对象的所有子对象的句柄组成的一个向量。
Parent属性:该对象的父对象的句柄。
Type属性:对象的类型,这是一个只读属性。
Tag属性:用于给对象定义一个标识符。
clear clc %图一绘制螺旋线 subplot(1,2,1); h1 = fplot(@(t)t.*sin(t),@(t)t.*cos(t),[0,6*pi]); %句柄h1,表示曲线 axis equal; %图二绘制山峰图 subplot(1,2,2); [x,y,z] = peaks(20); h2 = mesh(x,y,z); %句柄h2,表示曲面 % h10 = h1.Parent; % h10.Color = 'y'; % h1.Color = 'r'; % h2.Parent.Color = 'cyan'; h1.Color = 'g'; h1.Parent.Color = 'y'; h2.Parent.Color = 'cyan';
(2)图形对象的常用动态属性
KeyPressFcn属性:定义按下键盘按键事件的响应。
CreatFcn属性:定义创建图形对象时做出的响应。
DeleteFcn属性:定义取消图形对象时做出的响应。
WindowButtonDownFcn或ButtonDownFcn属性:定义单击鼠标左键事件的响应。
(1)建立图形窗口对象
使用figure函数,其调用格式为:
句柄变量=figure(属性1,属性值1,属性2,属性值2,...)其中,属性用于设置图形窗口的特征。
句柄变量=figure
figure(窗口句柄)
(2)图形窗口属性
MenuBar属性:控制图形窗口是否具有菜单条,其取值为‘none’或‘figure’。
Name属性:指定图形窗口的标题。
Number Title属性:决定着在图形窗口的标题中是否以 “Figure n:”为标题前缀。
Color属性:设定图形窗口背景的颜色。
Position属性:定义了图形窗口对象在屏幕上的位置和大小,值是一个4元行向量[x,y,w,h]。
Units属性:定义图形窗口使用的长度单位。
%建立一个图形窗口 hf = figure; %按默认属性建立一个图形窗口 hf.Color = [0,1,1]; %设置背景色 hf.Position = [500,500,300,150]; %设置屏幕位于左下角,宽度和高度分别为300像素点和150像素点 hf.Name = '图形窗口示例'; %设置标题 hf.NumberTitle = 'off'; %设置标题不显示前缀 hf.MenuBar = 'none'; %设置图形窗口没有菜单条 hf.ButtonDownFcn = 'gtext("Hello,World!")'; %单击左键显示文本“Hello World!” hf.KeyPressFcn = 'gtext("Sun!")'; %按键盘任意建,显示Sun!
坐标轴对象时图形对象的父对象,即当作图形对象的容器。
(1)建立坐标轴对象
使用axes函数,其调用格式为:
句柄变量 = axes(属性1,属性值1,属性2,属性值2,...) 其中,属性用于设置坐标轴的特征。
句柄变量 = axes
axes(坐标轴句柄)
%利用坐标轴实现图形窗口的分割 ha1 = axes('Position',[0.1,0.1,0.7,0.7]); contour(peaks(20)); %等高线图 ha1.Title = title('等高线'); ha1.YLabel = ylabel('南北向'); ha1.XLabel = xlabel('东西向'); ha2 = axes('Position',[0.65,0.7,0.28,0.28]); surf(peaks(20)); %峰图 ha2.View=[-30,45]; %设置当前坐标轴的视点位置。
(2)坐标轴对象的属性
%利用坐标轴实现图形窗口的分割 ha1 = axes('Position',[0.1,0.1,0.7,0.7]); contour(peaks(20)); %等高线图 ha1.Title = title('等高线'); ha1.YLabel = ylabel('南北向'); ha1.XLabel = xlabel('东西向'); ha2 = axes('Position',[0.65,0.7,0.28,0.28]); surf(peaks(20)); %峰图 ha2.View=[-30,45]; %设置当前坐标轴的视点位置。
line函数的调用格式为:
句柄变量=line(x,y,z,属性1,属性值1,属性2,属性值2,...)
其中,x、y、z在存储数据点的坐标,与plot、plot3函数含义相同。(与plot不同的是:line()函数不会覆盖原图形显示界面,会在原来图形的基础上叠加图形)
surfacei函数的调用格式为:
句柄变量= surface(x,y,z,c,属性1,属性值1,属性2,属性值2,...)
其中,x、y、z存储数据点的坐标,与surf函数含义相同;c用于指定在不同高度下的曲面颜色。
%绘制立体圆环
r = linspace(0,2*pi,60);
[u,v] = meshgrid(r);
x = (8 + 3*cos(v)).*cos(u);
y = (8 + 3*cos(v)).*sin(u);
z = 3*sin(v);
% surf(x,y,z);
axes('view',[-37.5,30]) %设置视点
hs = surface(x,y,z); %调用surface()按默认属性绘制曲面
axis equal;
%让曲面的颜色过度看起来更加平滑
hs.EdgeColor = 'none';
hs.FaceColor = 'interp';
(1)创建光源对象
light函数的调用格式为:
对象句柄 = light(属性1,属性值1,属性2,属性值2,...)
其中,属性指定光源的特性。
(2)光源对象的属性
(3)设置光照模式
lighting命令格式为:
lighting 选项
其中,选项可取值为:flat、gouraud、phong、none。
%绘制光照处理后的圆环面,并观察不同光照模式下的效果
r=linspace(0,2*pi,60); [u,v]=meshgrid(r);
x=(8+3*cos(v)).*cos(u); y=(8+3*cos(v)).*sin(u); z=3*sin(v);
%绘制圆环
axes('Position',[0.05,0.675,1.0,0.3], 'View',[-37.5,30]);
hs1=surface(x,y,z); axis equal;
hs1.EdgeColor='none'; hs1.FaceColor='interp';
%绘制圆环
axes('Position',[0.05,0.35,1.0,0.3], 'View',[-37.5,30]);
hs2=surface(x,y,z); axis equal;
hs2.EdgeColor='none'; hs2.FaceColor='interp';
%光照处理
light('Position',[0,0,8])
lighting flat
%绘制圆环
axes('Position',[0.05,0.025,1.0,0.3], 'View',[-37.5,30]);
hs3=surface(x,y,z); axis equal;
hs3.EdgeColor='none'; hs3.FaceColor='interp';
%光照处理
light('Position',[0,0,8])
lighting phong
%绘制具有不同反射特性的圆环面并观察反射特性对图形效果的影响
r=linspace(0,2*pi,60); [u,v]=meshgrid(r);
x=(8+3*cos(v)).*cos(u); y=(8+3*cos(v)).*sin(u); z=3*sin(v);
%第一个圆环
axes('Position',[0.05,0.675,1.0,0.3],'View',[-37.5,30]);
hs1=surface(x,y,z);axis equal;
hs1.EdgeColor='none';hs1.FaceColor='interp';
light('Position',[0,0,8]) ;lighting phong
hs1.SpecularStrength=0.1;%反射参数设置
%第二个圆环
axes('Position', [0.05,0.35,1.0,0.3],'View',[-37.5,30]);
hs2=surface(x,y,z);axis equal;
hs2.EdgeColor='none';hs2.FaceColor='interp';
light('Position',[0,0,8]) ;lighting phong
hs2.SpecularStrength=0.5;%反射参数设置
%第三个圆环
axes('Position', [0.05,0.025,1.0,0.3],'View',[-37.5,30]);
hs3=surface(x,y,z);axis equal;
hs3.EdgeColor='none';hs3.FaceColor='interp';
light('Position',[0,0,8]) ;lighting phong ;
图形用户界面:用户与计算机进行信息交流的窗口。
设计图形用户界面的方法
调用建立用户界面控件的函数、使用MATLAB提供的GUIDE工具进行可视化设计。
(1)常用控件
输入和输出类控件:编辑框、静态文本、列表框、滑动条等。
实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框等。
(2)建立控件对象
uicontrol函数用于建立控件对象,其调用格式为:
句柄变量 = uncontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,…)
其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认在当前图形窗口建立控件对象。
(3) 控件对象的基本控制属性
回调函数的定义格式:
function 函数名(source, eventdata)
...
end
参数source是发生事件的源控件对象句柄,eventdata存储事件数据
(1)uimenu函数
uimenu函数用于创建、设置、修改菜单,其调用格式为:
一级菜单项句柄 = uimenu(图形窗口句柄,属性1,属性值1,属性2,属性值2,....)
子菜单项句柄 = uimenu(上级菜单项句柄,属性1,属性值1,属性2,属性值2,...)
(2)菜单属性
Label属性:用于定义菜单项的名字。
Accelertor属性:用于定义菜单项的快捷键。
Checked属性:指示菜单项是否已选中。
Enable属性:控制菜单项的可选择性。
Separator属性:用于在菜单中添加分隔线。
%{
在例1的界面中添加“图形选项”菜单项,其中包括一个二级菜单项“线型”,
其下又有3个子菜单项,分别为“实线”、“虚线”、“双划线”。
%}
hopt=uimenu(gcf,'Label','图形选项','Accelerator','L');
hLStyle=uimenu(hopt,'Label','线型','Tag','LStyle', 'Enable','off');
hL_Solid=uimenu(hLStyle,'Label','实线',...
'Tag','Solid','Callback', @MLine_Type);
hL_Dotted=uimenu(hLStyle,'Label','虚线',...
'Tag','Dotted','Callback', @MLine_Type);
hL_Dashed=uimenu(hLStyle,'Label','双划线',...
'Tag','Dashed','Callback', @MLine_Type);
%例2,回调函数,由例1修改而来
% plot_sin.m文件
function plot_sin(source, callbackdata)
t=-pi:pi/20:pi;
plot(t,sin(t));
h1=findobj('Tag','LStyle');
h1.Enable='On'; %使得 “线型”菜单项可用
end
% Mline_Type.m函数文件
function MLine_Type(source,callbackdata)
hline=findobj('Type','line');
if strcmp(source.Tag,'Solid' )==1
hline.LineStyle='-';
elseif strcmp(source.Tag,'Dotted' )==1
hline.LineStyle=':';
elseif strcmp(source.Tag,'Dashed' )==1
hline.LineStyle='--';
end
end
即将淘汰的用户界面编辑工具
略