null第五章 matlab句柄绘图第五章 matlab句柄绘图——matlab语言的句柄绘图可以对图形各基本对象进行更为细腻的修饰,可以产生更为复杂的图形,而且为动态图形的制作奠定了基础。
高层绘图与底层绘图的区别高层绘图与底层绘图的区别高层绘图函数——是对整个图形进行操作的,图形每一部分的属性都是按缺省方式设置的,充分体现了matlab语言的实用性。
底层绘图函数——可以定制图形,对图形的每一部分进行控制,用户可以用来开发用户界面以及各专业的专用图形。充分体现了matlab语言的开发性一、什么是句柄图形一、什么是句柄图形句柄图形:利用底层绘图函数,通过对对象属性的设置(Handle Graphics)与操作实现绘图。
句柄图形中所有图形操作都是针对图形对象而言的。
句柄图形充分体现了面向对象的程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
。null句柄图形的功能
句柄图形可以随意改变matlab生成图形的方式。
句柄图形允许你定制图形的许多特性,无论是对图形做一点小改动,还是影响所有图形输出的整体改动。
句柄图形的特性高层绘图函数是无法实现的二、图形对象和句柄二、图形对象和句柄图形对象—— 图形系统中最基本、最底层的单元
引例:
x=0:2*pi/180:2*pi;
y1=sin(2*x);
y2=cos(2*x);
plot(x,y1,x,y2)图形对象的基本要素以根屏幕为先导图形对象的基本要素以根屏幕为先导根屏幕父对象
子对象图形对象之间的关系为父代与子代的关系null说明:
根:图形对象的根,对应于计算机屏幕,根只有一个,其它所有图形对象都是根的后代。
图形窗口: 根的子代,窗口的数目不限,所有图形窗口都是根屏幕的子代,除根之外,其它对象则是窗的后代。
界面控制:图形窗口的子代,创建用户界面控制对象,使得用户可采用鼠标在图形上作功能选择,并返回句柄。null界面菜单轴: 图形窗口的子代,创建用户界面菜单对象
轴:图形窗口的子代,创建轴对象,并返回句柄,线面字块像的父辈
线:轴的子代,创建线对象
面:轴的子代,创建面对象
字:轴的子代,创建字对象
块:轴的子代,创建块对象
像:轴的子代,创建图像对象null窗口对象线对象轴对象null
面对象轴对象像对象块对象线对象文字对象2.创建图形对象的底层函数2.创建图形对象的底层函数figure创建图形窗口
调用格式: h=figure(n) n为窗口序号
axes 创建轴对象
h=axes(‘position’, )
定义轴对象的位置与大小nullline 创建线对象
h=line(x,y,z)
patch 创建块对象
h=patch(x,y,z,c) x,y,z定义多边形,c确定填充颜色。
surface 创建面对象
h=surface(x,y,z,c) x,y,z三维曲面坐标,c颜色矩阵。nullimage 显示图象
h=image(x); x为图像矩阵
text 标注文字
h=text(x,y,’string’)
每个底层函数只能创建一个图形
对象,并将它们置于适当的父辈对象
中。确定标注位置标注字符串nulluicontrol图形界面控制
调用格式:
h=uicontrol(‘property’,value)
property/value确定控制类型
uimenu创建用户界面菜单
调用格式:
h=uimenu(‘property’,value)
property/value 确定菜单形式。
3.图形对象的属性3.图形对象的属性 对象的属性(Properties)
- 定义和刻画对象的外貌和性状
由两部分组成:属性名和属性值二元对
(Property-Name, Property-Value)
属性名和属性值总是成对出现的
属性名是描述的英文词组字符串
第一个字母大写/单词间没有空格
例如 ’LineStyle’,’ColorMap’ 等
通过编辑修改属性值可以改变图形3.图形对象的属性3.图形对象的属性※ 图形对象是由属性来描述的
例如: figure 大小位置 [1 1 640 480]
颜色 [ 0 0 0] 省缺
line a. x, y 数据;b. 线的颜色
c. 线型; d. 线宽null※在高层绘图中对图形对象的描述一般是省缺的或由高层绘图函数自动设置的,因此对用户来说几乎是不透明的。
※但句柄绘图中上述图形对象都是用户需要经常使用的,所以要作到心中有数,用句柄设置图形对象的属性。
4.句柄(handle)与句柄操作4.句柄(handle)与句柄操作什么是句柄?
句柄是图形对象的标识代码,标识代码含有图形对象的各种必要的属性信息。
各图形对象的句柄数据格式:
根屏幕 0
图形窗口 整数,表示图形窗口数
其它对象 对应的符点数null 所有能创建图形对象的matlab函数都可给出所创建图形对象的句柄
例:创建1号窗口,返回句柄
h=figure(1)
h=1 返回值为窗口号数
例:h=line (1:6,1:6)创建线对象的同时也建立了一个唯一的句柄
变量h是句柄值——浮点数
二、对象的属性操作二、对象的属性操作 控制一个图形对象是通过句柄实现的,具体是通过句柄操作函数get,set将某对象句柄属性作设置与修改。
对象属性的直接操作是通过当前句柄来实现的,所以首先要获得当前句柄值以及对象的属性,然后再查询或修改。1、图形对象属性的获得与设置1、图形对象属性的获得与设置句柄属性的设置与修改
get: 获得句柄图形对象的属性和返回某些对象的句柄值
set: 改变图形对象的属性
专用函数:
gcf:当前窗口对象的句柄 Get Current
Figure
gca:当前轴对象的句柄 Get Current
Axesnull操作格式:
h=gcf 将当前窗口对象的句柄返回h
get(h)或get(h,'属性名'): 查阅某对象的属性或子(children)父(parent)代的句柄值
set(h, ‘属性名’, ‘属性值’):设置或修改某对象的属性值
例:h=line(x,y)
get(h)
get(get(gca,’children’) ,1)轴的子代null - 对象句柄的获取
基本方法
从图形创建指令获得句柄
追溯法获取图柄
当前对象句柄的获取
根据对象特性获取句柄
根据对象标签获取句柄
null - 追溯方式
>> H_pa= get(H_known,’Parent’)
或者
>> H_ch= get(H_known,’Children’)
% H_known 已知对象句柄
% ‘Parent’/’Children’ 父/子关系设定
% H_pa/H_ch 获取父/子对象句柄null例:创建一个线对象并返回线对象的句柄值
h1=line([0:10],[0:10])
h1 =
57.0001
h1为句柄的代码值
null查阅线对象的属性名称和属性值
get(h1)
Color = [1 1 0]
EraseMode = normal
LineStyle = -
LineWidth = [0.5]
MarkerSize = [6]
Xdata = [ (1 by 11) ]
Ydata = [ (1 by 11) ]
Zdata = [] nullButtonDownFcn = Children = [] Clipping = on Interruptible = no Parent = [56.0001] Type = line UserData = [] Visible = on
根据轴是线对象的父代,可查轴的句柄
get(gca)null可查色序
get(gca,'colororder')
ans =
1 1 0
1 0 1
0 1 1
1 0 0
0 1 0
0 0 1
null设置线条和窗口的颜色
set(h1,'color',[1 0 0])
set(h1,'color',[1 0.5 0])nullset(gcf,'color',[0.5 0.5 0.5])
set(gcf,'color',[0.5 0.6 0.8])null例:作正弦、余弦曲线,将正弦曲线改为虚
线,将余弦曲线幅度减为1/2高度,如何用
句柄实现。
x=0:2*pi/180:2*pi;
y1=sin(x);y2=cos(x);
plot(x,y1,x,y2,x,zeros(size(x) ),'w:')null首先查询各对象的属性
get(gcf)
h=get(gcf,'children')
h =
60.0004
hh=get(gca,'children')
hh =
70.0004
69.0004
68.0004null修改属性y11=get(hh(2),'ydata');
y22=y11/2;
set(hh(2),'ydata',y22)
set(hh(3),'linestyle',':')nullget(h)
get(h,’ propertyname’)
set(h)
set(h,’propertyname’,value)
set(h,’属性名称’,‘新属性’)
‘color’, ’r’
‘linestyle’, ’:’
‘figurecolor’, ’m’null2.对象属性的继承操作
对象属性的继承操作是通过父代对象,设置缺省对象属性来实现的。
父代句柄属性中设置缺省值后,所有子代对象均可继承该属性的缺省值。
属性缺省值设置有两种:
厂家设置值:其值不可更改
用户设置:当前环境下有效,
搜索顺序:子父祖父null属性缺省值的描述结构为:
Dfault+对象名称+对象属性
如:DefaultFigureColor —— 图形窗口的颜色
DefaultAxesAspaceRatio—— 轴的视图比率
DefaultLineLineWide —— 线的宽度
DefaultLineColor —— 线的颜色
缺省值的获得与设置也是由get,set函数实现的null例:
get(0,'DefaultFigureColor') —— 获得图形
窗口的省缺值
set(h,'DefaultLineColor','r') ——设置线的
颜色为红色
例:在图上添加文字注释,颜色为红色
set(gca,'DefaultTextColor',[1 0 0])
gtext('正弦')
gtext('余弦')
在轴对象上设置字对象的颜色省缺值为红色
继承该省缺值在图上添加红色的文字注释
null 例:在轴对象上(父代对象)设置线的颜色省缺值为红色
x=0:2*pi/180:2*pi;
y=sin(2*x);
set(gca,'DefaultLineColor',[1 0 0]);
h=line(x,y)
h =
68.0001
set(h,'color','default')
nullset(0,'DefaultFigureColor',[0.5 0.5 0.5])
x=0:2*pi/180:2*pi;y=sin(2*x);
h=line(x,y)
—— 将所有新图形窗口的颜色由省缺值黑色设置为适中的灰色nullset(h,'color','m','linewidth',2,'linestyle','*')nullset(0,'defaultfigurecolor','b')
set(0,'defaultaxescolor','g')
h=line(x,y)
set(h,'color','r')
set(gca,'xcolor','w')
set(gca,'ycolor','w')nullh=surf(peaks(30))
set(0,'defaultsurfaceedgecolor',‘g')
set(h,'edgecolor','default')null4.其它操作
default —— 由父代继承
factory —— 厂家设定省缺值
remove —— 清除设定省缺值
例:set(gca,'defaultlinecolor','remove')
set(h,’color’,’factory’)
注意:plot,line命令遵循colororder色序对设置省缺值无效,五、产生动画效果的两种方式五、产生动画效果的两种方式1、影片方式
以图像的方式预存多个画面,再将这些画面逐帧播放。
(1)使用getframe抓取图形作为画面,每个画面作为电影矩阵M的一列
(2)使用movie(M,n)来将电影矩阵M播放n次
优点:可以制作精美的图像,播放速度快
缺点:每个画面必须事先准备,无法实时成像,需要占用大量的内存
null例: 抓取
n=20;
for i=1:20
x=0:0.1:i;
y=1-1/sqrt(1-0.3^2)*exp(-0.3*x).*sin(sqrt(1-0.3^2)*x+acos(0.3));
plot(x,y)
axis([0,20,0,1.5]);
A(i)=getframe;
end
播放
movie(A,3)nullnullnull2、对象方式
使用句柄图形的概念,所有的曲线等都可视为一个对象,每个对象都可以通过属性设置修改。
通过擦除旧对象,产生新对象,产生动画效果。
保持图形窗口中大部分对象,即整个背景不变,只更新部分运动的对象,以加快图像的实时生成速度。
优点:不需要大量的内存,可以生成实时的动画
缺点:需要技巧性较高,无法生成太复杂的动画null动画步骤:
(1)产生一个对象,其EraseMode设为xor、background或none
(2)在循环中产生动画,每次循环改变对象的的位置属性(xdata、ydata)等
(3)使用drawnow刷新屏幕
对象擦除方式EraseMode:对于旧对象的处理方式
normal:计算整个画面的数据,重画整个图形
xor:将旧对象的点以xor方式还原,这样不会擦除被擦对象下面的其他图像
background:将旧对象的点变成背景颜色,实现擦除
none:保留旧对象的点,不擦除null例:
n=20;
x=0:0.1:n;
y=1-1/sqrt(1-0.3^2)*exp(-0.3*x).*sin(sqrt(1-0.3^2)*x+acos(0.3));
plot(x,y)
h=line(0,0,'color','red','marker','.','markersize',40,'erasemode','xor');
for i=1:length(x)
set(h,'xdata',x(i),'ydata',y(i));
pause(0.005);
drawnow
end