tomwalters@0: function h=ellipse(ra,rb,ang,x0,y0,C,Nb) tomwalters@0: % Ellipse adds ellipses to the current plot tomwalters@0: % tomwalters@0: % ELLIPSE(ra,rb,ang,x0,y0) adds an ellipse with semimajor axis of ra, tomwalters@0: % a semimajor axis of radius rb, a semimajor axis of ang, centered at tomwalters@0: % the point x0,y0. tomwalters@0: % tomwalters@0: % The length of ra, rb, and ang should be the same. tomwalters@0: % If ra is a vector of length L and x0,y0 scalars, L ellipses tomwalters@0: % are added at point x0,y0. tomwalters@0: % If ra is a scalar and x0,y0 vectors of length M, M ellipse are with the same tomwalters@0: % radii are added at the points x0,y0. tomwalters@0: % If ra, x0, y0 are vectors of the same length L=M, M ellipses are added. tomwalters@0: % If ra is a vector of length L and x0, y0 are vectors of length tomwalters@0: % M~=L, L*M ellipses are added, at each point x0,y0, L ellipses of radius ra. tomwalters@0: % tomwalters@0: % ELLIPSE(ra,rb,ang,x0,y0,C) tomwalters@0: % adds ellipses of color C. C may be a string ('r','b',...) or the RGB value. tomwalters@0: % If no color is specified, it makes automatic use of the colors specified by tomwalters@0: % the axes ColorOrder property. For several circles C may be a vector. tomwalters@0: % tomwalters@0: % ELLIPSE(ra,rb,ang,x0,y0,C,Nb), Nb specifies the number of points tomwalters@0: % used to draw the ellipse. The default value is 300. Nb may be used tomwalters@0: % for each ellipse individually. tomwalters@0: % tomwalters@0: % h=ELLIPSE(...) returns the handles to the ellipses. tomwalters@0: % tomwalters@0: % as a sample of how ellipse works, the following produces a red ellipse tomwalters@0: % tipped up at a 45 deg axis from the x axis tomwalters@0: % ellipse(1,2,pi/8,1,1,'r') tomwalters@0: % tomwalters@0: % note that if ra=rb, ELLIPSE plots a circle tomwalters@0: % tomwalters@0: tomwalters@0: % written by D.G. Long, Brigham Young University, based on the tomwalters@0: % CIRCLES.m original tomwalters@0: % written by Peter Blattner, Institute of Microtechnology, University of tomwalters@0: % Neuchatel, Switzerland, blattner@imt.unine.ch tomwalters@0: tomwalters@0: tomwalters@0: % Check the number of input arguments tomwalters@0: tomwalters@0: if nargin<1, tomwalters@0: ra=[]; tomwalters@0: end; tomwalters@0: if nargin<2, tomwalters@0: rb=[]; tomwalters@0: end; tomwalters@0: if nargin<3, tomwalters@0: ang=[]; tomwalters@0: end; tomwalters@0: tomwalters@0: %if nargin==1, tomwalters@0: % error('Not enough arguments'); tomwalters@0: %end; tomwalters@0: tomwalters@0: if nargin<5, tomwalters@0: x0=[]; tomwalters@0: y0=[]; tomwalters@0: end; tomwalters@0: tomwalters@0: if nargin<6, tomwalters@0: C=[]; tomwalters@0: end tomwalters@0: tomwalters@0: if nargin<7, tomwalters@0: Nb=[]; tomwalters@0: end tomwalters@0: tomwalters@0: % set up the default values tomwalters@0: tomwalters@0: if isempty(ra),ra=1;end; tomwalters@0: if isempty(rb),rb=1;end; tomwalters@0: if isempty(ang),ang=0;end; tomwalters@0: if isempty(x0),x0=0;end; tomwalters@0: if isempty(y0),y0=0;end; tomwalters@0: if isempty(Nb),Nb=300;end; tomwalters@0: if isempty(C),C=get(gca,'colororder');end; tomwalters@0: tomwalters@0: % work on the variable sizes tomwalters@0: tomwalters@0: x0=x0(:); tomwalters@0: y0=y0(:); tomwalters@0: ra=ra(:); tomwalters@0: rb=rb(:); tomwalters@0: ang=ang(:); tomwalters@0: Nb=Nb(:); tomwalters@0: tomwalters@0: if isstr(C),C=C(:);end; tomwalters@0: tomwalters@0: if length(ra)~=length(rb), tomwalters@0: error('length(ra)~=length(rb)'); tomwalters@0: end; tomwalters@0: if length(x0)~=length(y0), tomwalters@0: error('length(x0)~=length(y0)'); tomwalters@0: end; tomwalters@0: tomwalters@0: % how many inscribed elllipses are plotted tomwalters@0: tomwalters@0: if length(ra)~=length(x0) tomwalters@0: maxk=length(ra)*length(x0); tomwalters@0: else tomwalters@0: maxk=length(ra); tomwalters@0: end; tomwalters@0: tomwalters@0: % drawing loop tomwalters@0: tomwalters@0: for k=1:maxk tomwalters@0: tomwalters@0: if length(x0)==1 tomwalters@0: xpos=x0; tomwalters@0: ypos=y0; tomwalters@0: radm=ra(k); tomwalters@0: radn=rb(k); tomwalters@0: if length(ang)==1 tomwalters@0: an=ang; tomwalters@0: else tomwalters@0: an=ang(k); tomwalters@0: end; tomwalters@0: elseif length(ra)==1 tomwalters@0: xpos=x0(k); tomwalters@0: ypos=y0(k); tomwalters@0: radm=ra; tomwalters@0: radn=rb; tomwalters@0: an=ang; tomwalters@0: elseif length(x0)==length(ra) tomwalters@0: xpos=x0(k); tomwalters@0: ypos=y0(k); tomwalters@0: radm=ra(k); tomwalters@0: radn=rb(k); tomwalters@0: an=ang(k) tomwalters@0: else tomwalters@0: rada=ra(fix((k-1)/size(x0,1))+1); tomwalters@0: radb=rb(fix((k-1)/size(x0,1))+1); tomwalters@0: an=ang(fix((k-1)/size(x0,1))+1); tomwalters@0: xpos=x0(rem(k-1,size(x0,1))+1); tomwalters@0: ypos=y0(rem(k-1,size(y0,1))+1); tomwalters@0: end; tomwalters@0: tomwalters@0: co=cos(an); tomwalters@0: si=sin(an); tomwalters@0: the=linspace(0,2*pi,Nb(rem(k-1,size(Nb,1))+1,:)+1); tomwalters@0: % x=radm*cos(the)*co-si*radn*sin(the)+xpos; tomwalters@0: % y=radm*cos(the)*si+co*radn*sin(the)+ypos; tomwalters@0: h(k)=line(radm*cos(the)*co-si*radn*sin(the)+xpos,radm*cos(the)*si+co*radn*sin(the)+ypos); tomwalters@0: set(h(k),'color',C(rem(k-1,size(C,1))+1,:)); tomwalters@0: tomwalters@0: end; tomwalters@0: