MATLAB中M文件例子.doc 下载本文

内容发布更新时间 : 2024/4/30 1:07:18星期一 下面是文章的全部内容请认真阅读。

20.11 M文件例子

精通MATLAB工具箱含有许多实用函数,它们可以验证本章的许多概念。这些函数的基本部分已经在二维和三维图形这些章阐述过了。有了前面对句柄图形的讨论,我们现在可以更彻底地讨论这些函数。 最简单的精通MATLAB工具箱的函数之一提出了一个共同的问题。MATLAB函数gcf返回当前图形的句柄。但是,它有一个副作用。如果图形不存在,gcf就创建一个,并返回它的句柄。如果想寻找一个图形是否存在于头一个位置,要是没有,又不得不创建,怎么办?函数mmgcf正好实现由其内容所描述的工作。

function HF=mmgcf %MMGCF Get Current Figure if it Exists. % MMGCF returns the handle of the current figure if it exists. % If no current figure exists,MMGCF returns an empty handle. % % Note that the function GCF is different.It creates a figure and returns its handle if it does not % exist. % Copyright (c) 1996 by Prentice-Hall,Inc. Hf=get(0, ‘Children’ ); % check for figure children if isempty(Hf) return else Hf=get(0, ‘CurrentFigure’ ); end 函数mmgcf首先检查根对象的子对象的图形是否存在,如至少有一个图形对象时,根对象的 ‘CurrentFigure’ 属性就返回当前的图形。 函数mmgca为坐标轴对象执行同样的功能,如同在它的M文件内所描述的那样。

function Ha=mmgca

%MMGCA Get Current Axes if it exists.

% MMGCA returns the handle of the current axes if it exists. % If no current axes exists,MMGCA returns an empty handle. %

% Note that the function GCA is diffent.It create a figure and an axes and returns the axes % handle if they do not exist.

% Copyright (c) 1996 by Prentice-Hall,Inc.

Ha=findobj(0, ‘Type’ , ‘axes’ ); if isempty(Ha) return else Ha=get(get(0, ‘CurrentFigfure’ ), ‘CurrentAxes’ ); end 由于函数gco已经表现出当对象不存在时返回空矩阵的行为特性,就不需要函数mmgco了。 在精通MATLAB工具箱中的另一个函数是mmzap,在二维图形那一章里已作过介绍。如下M文件中所示,它使用mmgcf作错误检查,与findobj和get一起删除一个指定的图形。

function mmzap(arg)

%MMZAP Delete graphics object using mouse.

% MMZAP waits for a mouse click on an object in a figure window and deletes the object. % MMZAP or MMZAP text erases text objects. % MMZAP axes erases axes objects. % MMZAP line erases line objects. % MMZAP surf erases surface objects. % MMZAP patch erases patch objects. %

% Clicking on an object other than the selected type or striking a key on the keyboard aborts % the command.

% Copyright (c) 1996 by Prentice-Hall,Inc. if nargin<1,arg= ‘text’ ;end

Hf=mmgcf;

if isempty(Hf),error( ‘No Figure Available.’ ),end if length(findobj(0, ‘Type’ , ‘figure’ ))==1 figure(Hf) % bring only figure forword end

key=waitforbuttonpress; % pause untill user takes some action if key % key on keyboard pressed return % take no action else % object selected object=gco % get object selected by buttonpress type=get(object, ‘Type’ ); if all(type(1:4)==arg(1:4)) % delete only if ‘Type’ is correct delete(object)

end end 在编写句柄图形函数的M文件时,函数mmzap描述了一种很有用的技术。它利用函数waitforbuttonpress和gco的结合用鼠标来获取所选定对象的句柄。waifortbuttonpress是一个MATLAB内置函数,它的功能是等待鼠标点击或按键。它的帮助文本如下: 当 口

? help waitforbuttonpress

WAITFOR BUTTONPRESS Wait for key/buttonpress over figure. T= WAITFOR BUTTONPRESS stops program execution untill a key or mouse button is pressed over a figure window.Returns 0 when terminated by a mouse buttonpress,or 1 when terminated by a keypress.Additional information about the terminating event is available from the current figure.

See also GINPUT,GCF.

帮助信息:

WAITFORBUTTONPRESS等待一个鼠标/按钮对图形按下。

T=WAITFORBUTTONPRESS停止程序的执行,直到鼠标按钮或键在一个图形窗口按下。鼠标按钮按下时返回0;当键按下时返回1。其它的结束事件的信息可从当前的图形中窗获取。

参阅GINPUT和GCF。

鼠标按钮在鼠标指针指的图形上按下后,函数gco返回所点中对象的句柄。然后,该句柄可用来操作选中的对象。在精通MATLAB工具箱中,用这种简单的选择技术的函数还有mmline和mmaxes。其中,mmline的M文件描述如下:

function mmline(arg1,arg2, arg3, arg4, arg5, arg6) %MMLINE Set Line Properties Using Mouse

% MMLINE waites for a mouse click on a line then applies the desired properties to the % selected line.

% Properties are given in parts,e.g.,MMLINE Name value... % Properties: % NAME VALUE{default} % color [Y m c r g b w k] or an RGB in quotes: ‘[r g b]’ % style [- -- ; -.] % mark [o + . * X] % width points for linewidth {0.5}