Mercurial > hg > octave-nkf
annotate scripts/plot/compass.m @ 9665:1dba57e9d08d
use blas_trans_type for xgemm
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Sat, 26 Sep 2009 10:41:07 +0200 |
parents | 69a57c59868c |
children | 95c3e38098bf |
rev | line source |
---|---|
9245 | 1 ## Copyright (C) 2007, 2008, 2009 David Bateman |
7322 | 2 ## |
3 ## This file is part of Octave. | |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7 ## the Free Software Foundation; either version 3 of the License, or (at | |
8 ## your option) any later version. | |
9 ## | |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
14 ## | |
15 ## You should have received a copy of the GNU General Public License | |
16 ## along with Octave; see the file COPYING. If not, see | |
17 ## <http://www.gnu.org/licenses/>. | |
18 | |
19 ## -*- texinfo -*- | |
20 ## @deftypefn {Function File} {} compass (@var{u}, @var{v}) | |
21 ## @deftypefnx {Function File} {} compass (@var{z}) | |
22 ## @deftypefnx {Function File} {} compass (@dots{}, @var{style}) | |
23 ## @deftypefnx {Function File} {} compass (@var{h}, @dots{}) | |
24 ## @deftypefnx {Function File} {@var{h} =} compass (@dots{}) | |
25 ## | |
26 ## Plot the @code{(@var{u}, @var{v})} components of a vector field emanating | |
9040
dbd0c77e575e
Cleanup documentation file plot.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
27 ## from the origin of a polar plot. If a single complex argument @var{z} is |
7322 | 28 ## given, then @code{@var{u} = real (@var{z})} and @code{@var{v} = imag |
29 ## (@var{z})}. | |
30 ## | |
31 ## The style to use for the plot can be defined with a line style @var{style} | |
32 ## in a similar manner to the line styles used with the @code{plot} command. | |
33 ## | |
34 ## The optional return value @var{h} provides a list of handles to the | |
35 ## the parts of the vector field (body, arrow and marker). | |
36 ## | |
37 ## @example | |
38 ## @group | |
39 ## a = toeplitz([1;randn(9,1)],[1,randn(1,9)]); | |
40 ## compass (eig (a)) | |
41 ## @end group | |
42 ## @end example | |
43 ## | |
44 ## @seealso{plot, polar, quiver, feather} | |
45 ## @end deftypefn | |
46 | |
47 function retval = compass (varargin) | |
48 | |
49 [h, varargin, nargin] = __plt_get_axis_arg__ ("compass", varargin{:}); | |
50 | |
51 arrowsize = 0.25; | |
52 | |
9502
69a57c59868c
compass.m, feather.m: simplify argument processing
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
53 if (nargin == 0) |
69a57c59868c
compass.m, feather.m: simplify argument processing
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
54 print_usage (); |
69a57c59868c
compass.m, feather.m: simplify argument processing
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
55 elseif (nargin == 1 || (nargin == 2 && ! isnumeric (varargin{2}))) |
7322 | 56 ioff = 2; |
9502
69a57c59868c
compass.m, feather.m: simplify argument processing
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
57 z = varargin{1}(:).'; |
7322 | 58 u = real (z); |
59 v = imag (z); | |
9502
69a57c59868c
compass.m, feather.m: simplify argument processing
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
60 elseif (nargin > 1 && isnumeric (varargin{2})) |
7322 | 61 ioff = 3; |
9502
69a57c59868c
compass.m, feather.m: simplify argument processing
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
62 u = varargin{1}(:).'; |
69a57c59868c
compass.m, feather.m: simplify argument processing
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
63 v = varargin{2}(:).'; |
7322 | 64 endif |
65 | |
66 line_spec = "b-"; | |
9502
69a57c59868c
compass.m, feather.m: simplify argument processing
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
67 have_line_spec = false; |
7322 | 68 while (ioff <= nargin) |
69 arg = varargin{ioff++}; | |
7768
a2d9f325b65a
Use isschar instead of deprecated isstr
Rafael Laboissiere <rafael@debian.org>
parents:
7322
diff
changeset
|
70 if ((ischar (arg) || iscell (arg)) && ! have_line_spec) |
7322 | 71 [linespec, valid] = __pltopt__ ("compass", arg, false); |
72 if (valid) | |
73 line_spec = arg; | |
9502
69a57c59868c
compass.m, feather.m: simplify argument processing
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
74 have_line_spec = true; |
7322 | 75 break; |
76 else | |
77 error ("compass: invalid linespec"); | |
78 endif | |
79 else | |
80 error ("compass: unrecognized argument"); | |
81 endif | |
82 endwhile | |
83 | |
84 ## Matlab draws compass plots, with the arrow head as one continous | |
85 ## line, and each arrow separately. This is completely different than | |
86 ## quiver and quite ugly. | |
87 n = length (u); | |
88 xend = u; | |
89 xtmp = u .* (1 - arrowsize); | |
90 yend = v; | |
91 ytmp = v .* (1 - arrowsize); | |
92 x = [zeros(1, n); xend; xtmp - v * arrowsize / 3; xend; ... | |
93 xtmp + v * arrowsize / 3]; | |
94 y = [zeros(1, n); yend; ytmp + u * arrowsize / 3; yend; ... | |
95 ytmp - u * arrowsize / 3]; | |
96 [r, p] = cart2pol (x, y); | |
97 | |
98 oldh = gca (); | |
99 unwind_protect | |
100 axes (h); | |
101 newplot (); | |
102 hlist = polar (h, r, p, line_spec); | |
103 unwind_protect_cleanup | |
104 axes (oldh); | |
105 end_unwind_protect | |
106 | |
107 if (nargout > 0) | |
108 retval = hlist; | |
109 endif | |
110 | |
111 endfunction | |
112 | |
113 %!demo | |
114 %! a = toeplitz([1;randn(9,1)],[1,randn(1,9)]); | |
115 %! compass (eig (a)) |