在函数声明过程中,如果将varargin和varargout作为输入参数列表和输出参数列表的最后一个参数,那么在函数调用时,函数就可以接受任意个数的输入参数。如函数a=foo(x,y,varargin)中,如果调用方式为a=foo(x,y,z),则varargin是长度为1的单元数组,并且varargin{1}=z。如果调用方式是a=foo(x,y,z,c),则varargin{1}=z,varargin{2}=c。varargout类似。
具体使用看以下例子:
function [xh,xy]=drawheart(varargin)
%UNTITLED2 此处显示有关此函数的摘要
% 此处显示详细说明
error(nargchk(0,3,nargin));
nin=nargin;
if nin==0
cx1=0;
cy1=0;
r=1.0;
elseif nin==1
cx1=0;
cy1=0;
r=varargin{1}
elseif nin==2
cx1=0;
cy1=varargin{1};
r=varargin{2};
else
cx1=varargin{1};
cy1=varargin{2};
r=varargin{3};
end
if nargout==0
flag=1;
else
flag=0;
end
%计算数组
theta=linspace(0,2*pi,100);
x0=r*cos(theta);
y0=r*sin(theta);
x1=x0+cx1;
y1=y0+cy1;
cx2=2*x0+cx1;
cy2=2*y0+cy1;
x3=x0.*cos(theta)-y0.*sin(theta);
y3=x0.*sin(theta)+y0.*cos(theta);
for k=1:100
x2(k,:)=cx2(k)+x0;
y2(k,:)=cy2(k)+y0;
xx(k,:)=cx2(k)+x3(k);
yy(k,:)=cy2(k)+y3(k);
end
if flag
plot(cx1,cy1,'b','Markersize',6);
hold on;
plot(x1,y1);
axis([cx1-3.2*r,cx1+3.2*r,cy1-3.2*r,cy1+3.2*r]);
axis manual;
hold on;
daspect([1 1 1]);
set(gcf,'doublebuffer','on');
for k=1:100
plot(x2(k,:),y2(k,:),'c',xx(k),yy(k),'r*');
grid on;
pause(0.05);
end
end
调用:drawheart(0,2,3)
结果:放不了动图,只能看图片了
网友评论