www.gusucode.com > 《MATLAB智能算法30个案例》分析源代码 > 《MATLAB智能算法30个案例》分析源代码/code/chapter19/dsxy2figxy.m
function varargout = dsxy2figxy(varargin) if length(varargin{1}) == 1 && ishandle(varargin{1}) ... && strcmp(get(varargin{1},'type'),'axes') hAx = varargin{1}; varargin = varargin(2:end); else hAx = gca; end; if length(varargin) == 1 pos = varargin{1}; else [x,y] = deal(varargin{:}); end axun = get(hAx,'Units'); set(hAx,'Units','normalized'); axpos = get(hAx,'Position'); axlim = axis(hAx); axwidth = diff(axlim(1:2)); axheight = diff(axlim(3:4)); if exist('x','var') varargout{1} = (x - axlim(1)) * axpos(3) / axwidth + axpos(1); varargout{2} = (y - axlim(3)) * axpos(4) / axheight + axpos(2); else pos(1) = (pos(1) - axlim(1)) / axwidth * axpos(3) + axpos(1); pos(2) = (pos(2) - axlim(3)) / axheight * axpos(4) + axpos(2); pos(3) = pos(3) * axpos(3) / axwidth; pos(4) = pos(4) * axpos(4 )/ axheight; varargout{1} = pos; end set(hAx,'Units',axun)