home *** CD-ROM | disk | FTP | other *** search
- function [hc,hb] = compass(x,y,s)
- %COMPASS Compass plot.
- % COMPASS(Z) draws a graph that displays the angle and magnitude
- % of the complex elements of Z as arrows emanating from the origin.
- %
- % COMPASS(X,Y) is equivalent to COMPASS(X+i*Y). It displays the
- % compass plot for the angles and magnitudes of the elements of
- % matrices X and Y.
- %
- % COMPASS(Z,'S') and COMPASS(X,Y,'S') use line style 'S' where
- % 'S' is any legal linetype as described under the PLOT command.
- %
- % See also ROSE, FEATHER, QUIVER.
-
- % Charles R. Denham, MathWorks 3-20-89
- % Modified, 1-2-92, LS.
- % Copyright (c) 1984-93 by The MathWorks, Inc.
-
- a = ((0:4) + 1./2) ./ 4;
- sq = sqrt(2) .* exp(-sqrt(-1) .* 2 .* pi .* a);
-
- xx = [0 1 .8 1 .8].';
- yy = [0 0 .08 0 -.08].';
- arrow = xx + yy.*sqrt(-1);
-
- if nargin == 2
- if isstr(y)
- s = y;
- y = imag(x); x = real(x);
- else
- s = 'r-';
- end
- elseif nargin == 1
- s = 'r-';
- y = imag(x); x = real(x);
- end
-
- x = x(:);
- y = y(:);
- if length(x) ~= length(y)
- error('X and Y must be same length.');
- end
-
- z = (x + y.*sqrt(-1)).';
- a = arrow * z;
- mx = max(max(abs(a)));
- next = lower(get(gca,'NextPlot'));
- isholdon = ishold;
- b = plot(real(sq), imag(sq), 'w:'); hold on
- h = plot(real(a), imag(a), s);
- axis('equal')
- if ~isholdon
- set(gca,'NextPlot',next);
- end
- if nargout > 0
- hc = h;
- hb = b;
- end
-