⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comets.m

📁 hi i have a huge collection are you interested
💻 M
字号:
function comets(x,y,p,color,linesty,linewid)% COMETS Multiple comet plot.%      COMET(Y) displays an animated comet plot of the vector Y.%      COMET(X,Y) displays an animated comet plot of vector Y vs. X.%      COMET(X,Y,P) uses a comet of length p*length(Y).%        Default is p = 0.10.%      COMETS(X,Y,P,COLOR,LINESTY,LINEWID)%        Other arguments that can be specified are:%      COLOR = [CH1 CB1 CT1; CH2 CB2 CT2; ... ; CHN CBN CTN], where%        CH - color of the head,  CB - body, CT - tail. The full%        format is Nx3 string matrix if colors are letters (among %        'rgbycmwk') or Nx9 number matrix if colors are RGB triplets.%      LINESTYLE = [LSH1 LSB1 LST1; ... ; LSHN LSBN LSTN],%        where LSH1 of the size [1 2] is the linestyle of the head,%        etc. The full size is Nx6 string matrix, each linestyle %        represented by [1 2] size  string: 'o ', '- ', '--', etc.%        For example LINESTYLE = ['x --- '; '* - -'] represents two%        comets: the first one with the head 'x', the body '--' and%        the tail '-', the second with the head '*', the body '-' and%        the tail '-'.    %      LINEWIDTH = [LWH1 LWB1 LWT1; ... LWHN LWBN LWTN], where LWH1%        (positive integer) is the linewidth (or markersize) of the%        head, etc. The full size is Nx3 matrix.%%      If all line property arguments (COLOR, LINESTYLE, LINEWIDTH)%      have only 1 row, then COMETS works in fast "vectorized" regime%      and all comets have the same colors and linestyles (only 3 line%      objects will be created). If any of these arguments have more%      than 1 row the total number of comets will be equal to the%      number of columns of matrices X and Y, each comet represented%      by 3 separate line objects (their movement is slower in this%      case). If the number of rows in the line property arguments is %      less than the number of columns in X, Y then colors and%      linestyles will be cycled through.%%      COMETS is the front-end to COMETS0, which can be called by%      itself but with stricter syntax.%        %      COMETS, by itself, is self demonstrating.%	Example:%	    t = -pi:pi/200:pi;%	    comets(t,tan(sin(t))-sin(tan(t)))%	See also COMETS0, CMTSDEMO, COMET, COMET3.%       Original: COMET,%	Charles R. Denham, MathWorks, 1989.%	Revised 2-9-92, LS and DTP; 8-18-92, 11-30-92 CBM.%	Copyright (c) 1984-93 by The MathWorks, Inc.%%   Modified 7-18-94, Kirill Pankratov, CMPO MIT % Defaults ....................................................pdflt = .1;             % Default for partial body lengthcolordflt = 'wym';      % Default for colorslinestydflt = 'o -';    % Default for linestyleslinestybodydflt = '-';  % Default for body linestylelinestytaildflt = '-';  % Default for body linestylelinewiddflt = [1 1];    % Default for linewidthmksizedflt = 6;         % Default for markersize % Handle input arguments .......................................nolnw = 0;if nargin < 6, linewid = linewiddflt; nolnw = 1; endif nargin < 5, linesty = linestydflt; endif nargin < 4, color = colordflt; endif nargin < 3, p = pdflt; endif nargin == 0,                    % Demo mode    x = -pi:pi/200:pi;   y = tan(sin(x))-sin(tan(x));   p = 0.1;else                               % Make x uniform  if nargin < 2, y = x; x = 1:size(y,1); x = x(:,ones(1,size(y,2))); endendif size(x,1) == 1, x = x(:); end   % Transpose if x is a row vectorif size(y,1) == 1, y = y(:); end   % Transpose if y is a row vectorif size(x,2)==1, x = x(:,ones(1,size(y,2))); end % % Fill empty with defaults ..................if p == [], p = pdflt; endif color == [], color = colordflt; endif linesty == [], linesty = linestydflt; endif linewid == [], linewid = linewiddflt; endif any(size(x,1)~=size(y,1)) % Check size ....  fprintf('\n  Error: arguments x and y must be of the same size.\n\n')  returnendlcom = size(x,1);       % Length of each cometncom = size(x,2);       % Number of cometslbody = round(p*lcom);  % Length of comet bodiesif size(color,1)==1&size(linesty,1)==1&size(linewid,1)==1  % One line  flag = 'one';else                                                       % Many lines  flag = 'many';end % Colors .........................................................if size(color,1) == 1, color = color(ones(ncom,1),:); end[nc,lc] = size(color);if isstr(color)         % If specified by strings  num = zeros(1,3); lc = min(lc,3);  num(1:lc) = ones(1,lc);  A = cumsum(num);else                    % If specifyed by RGB numbers  if lc<3, fprintf('\n  Error: not enough data for color\n\n')  return, end  num = zeros(1,3); lc = min(floor(lc/3),3);  num(1:lc) = ones(1,lc);  num = cumsum(num);  A = reshape(1:9,3,3);  if max(num) == 1, A = (1:3)'*ones(1,3); else, A = A(:,num); endendcolorhead = color(:,A(:,1));colorbody = color(:,A(:,2));colortail = color(:,A(:,3));A = (1:nc)'; A = A(:,ones(1,ceil(ncom/nc)));num = A(1:ncom);colorhead = colorhead(num,:);colorbody = colorbody(num,:);colortail = colortail(num,:); % Linestyles and markers ...............................[nc,lc] = size(linesty);if isstr(linesty)            % OK  linestyhead = linesty(:,1:min(2,lc));  if lc<3, linestybody = setstr(ones(nc,1)*linestybodydflt);  else, linestybody = linesty(:,3:min(4,lc));  end  if lc<5, linestytail = setstr(ones(nc,1)*linestybodydflt);  else, linestytail = linesty(:,5:min(6,lc));  endelse  fprintf('\n  Error: linestyles must be a string \n\n')  returnendA = (1:nc)'; A = A(:,ones(1,ceil(ncom/nc)));num = A(1:ncom);linestyhead = linestyhead(num,:);linestybody = linestybody(num,:);linestytail = linestytail(num,:); % Linewidth and markersize .............................if isstr(linewid)  fprintf('\n  Error: linewidth must be numbers \n\n')  returnend[nc,lc] = size(linewid);if lc<2, linewid(:,2) = 1*ones(nc,1); endif lc<3, linewid(:,3) = linewid(:,2); endA = (1:nc)'; A = A(:,ones(1,ceil(ncom/nc)));num = A(1:ncom);linewid = linewid(num,:);A = any((linestyhead(:,ones(1,5))==ones(size(linestyhead),1)*'o*x+.')');num = find(A');if nolnw&num~=[], linewid(num,1) = mksizedflt*ones(size(num)); end % Set axes limits if not fixed .........................if ishold==0  clf  axlim = [min(x(finite(x))) max(x(finite(x)))];  axlim = [axlim  min(y(finite(y))) max(y(finite(y)))];  axis(axlim)end % Create the lines ..............................................if strcmp(flag,'one')                       % If one line  lh = ones(3,1);  lh(1)=line; lh(2)=line; lh(3)=line;else                                        % If many lines  lh = ones(3,ncom);  for jc = 1:ncom    lh(1,jc) = line; lh(2,jc) = line; lh(3,jc) = line;  endend % Call the primitive COMETS0 ....................................comets0(lh,x,y,lbody,colorhead,colorbody,colortail,linestyhead,...   linestybody,linestytail,linewid)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -