Mercurial > hg > octave-nkf
annotate scripts/plot/compass.m @ 19669:c2031ad6dbe7
Fix octave header includes in audiodevinfo
* audiodevinfo.cc: change includes to use local octave headers
author | Vytautas Jančauskas <unaudio@gmail.com> |
---|---|
date | Wed, 11 Sep 2013 21:32:14 +0300 |
parents | 997b700b6ad4 |
children |
rev | line source |
---|---|
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
14092
diff
changeset
|
1 ## Copyright (C) 2007-2012 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 -*- | |
10793
be55736a0783
Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents:
10549
diff
changeset
|
20 ## @deftypefn {Function File} {} compass (@var{u}, @var{v}) |
7322 | 21 ## @deftypefnx {Function File} {} compass (@var{z}) |
22 ## @deftypefnx {Function File} {} compass (@dots{}, @var{style}) | |
17063
f17d9a574645
compass.m: Overhaul to use new __plt_get_axis_arg__.
Rik <rik@octave.org>
parents:
14335
diff
changeset
|
23 ## @deftypefnx {Function File} {} compass (@var{hax}, @dots{}) |
7322 | 24 ## @deftypefnx {Function File} {@var{h} =} compass (@dots{}) |
25 ## | |
26 ## Plot the @code{(@var{u}, @var{v})} components of a vector field emanating | |
17122
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17063
diff
changeset
|
27 ## from the origin of a polar plot. |
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17063
diff
changeset
|
28 ## |
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17063
diff
changeset
|
29 ## The arrow representing each vector has one end at the origin and the tip at |
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17063
diff
changeset
|
30 ## [@var{u}(i), @var{v}(i)]. If a single complex argument @var{z} is given, |
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17063
diff
changeset
|
31 ## then @code{@var{u} = real (@var{z})} and @code{@var{v} = imag (@var{z})}. |
7322 | 32 ## |
33 ## The style to use for the plot can be defined with a line style @var{style} | |
17122
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17063
diff
changeset
|
34 ## of the same format as the @code{plot} command. |
7322 | 35 ## |
17122
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17063
diff
changeset
|
36 ## If the first argument @var{hax} is an axes handle, then plot into this axis, |
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17063
diff
changeset
|
37 ## rather than the current axes returned by @code{gca}. |
17063
f17d9a574645
compass.m: Overhaul to use new __plt_get_axis_arg__.
Rik <rik@octave.org>
parents:
14335
diff
changeset
|
38 ## |
14001
5f0bb45e615c
doc: Update documentation for functions returning a graphics handle h (Bug #34761)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
39 ## The optional return value @var{h} is a vector of graphics handles to the |
5f0bb45e615c
doc: Update documentation for functions returning a graphics handle h (Bug #34761)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
40 ## line objects representing the drawn vectors. |
7322 | 41 ## |
42 ## @example | |
43 ## @group | |
14001
5f0bb45e615c
doc: Update documentation for functions returning a graphics handle h (Bug #34761)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
44 ## a = toeplitz ([1;randn(9,1)], [1,randn(1,9)]); |
14327
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
45 ## compass (eig (a)); |
7322 | 46 ## @end group |
47 ## @end example | |
48 ## | |
17445 | 49 ## @seealso{polar, feather, quiver, rose, plot} |
7322 | 50 ## @end deftypefn |
51 | |
17063
f17d9a574645
compass.m: Overhaul to use new __plt_get_axis_arg__.
Rik <rik@octave.org>
parents:
14335
diff
changeset
|
52 function h = compass (varargin) |
7322 | 53 |
17063
f17d9a574645
compass.m: Overhaul to use new __plt_get_axis_arg__.
Rik <rik@octave.org>
parents:
14335
diff
changeset
|
54 [hax, varargin, nargin] = __plt_get_axis_arg__ ("compass", varargin{:}); |
7322 | 55 |
17445 | 56 if (nargin == 0 || nargin > 3) |
9502
69a57c59868c
compass.m, feather.m: simplify argument processing
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
57 print_usage (); |
17445 | 58 endif |
59 | |
60 if (nargin == 1 || (nargin == 2 && ! isnumeric (varargin{2}))) | |
9502
69a57c59868c
compass.m, feather.m: simplify argument processing
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
61 z = varargin{1}(:).'; |
7322 | 62 u = real (z); |
63 v = imag (z); | |
17445 | 64 have_line_spec = (nargin == 2); |
65 elseif (nargin >= 2 && isnumeric (varargin{2})) | |
9502
69a57c59868c
compass.m, feather.m: simplify argument processing
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
66 u = varargin{1}(:).'; |
69a57c59868c
compass.m, feather.m: simplify argument processing
John W. Eaton <jwe@octave.org>
parents:
9245
diff
changeset
|
67 v = varargin{2}(:).'; |
17445 | 68 have_line_spec = (nargin == 3); |
69 else | |
70 print_usage (); | |
7322 | 71 endif |
72 | |
17445 | 73 arrowsize = 0.20; |
74 line_spec = "-b"; | |
75 | |
76 if (have_line_spec) | |
77 arg = varargin{end}; | |
78 if (ischar (arg) || iscellstr (arg)) | |
79 [~, valid] = __pltopt__ ("compass", arg, false); | |
7322 | 80 if (valid) |
10549 | 81 line_spec = arg; |
7322 | 82 else |
17445 | 83 error ("compass: invalid linestyle STYLE"); |
7322 | 84 endif |
85 else | |
17445 | 86 error ("compass: invalid linestyle STYLE"); |
7322 | 87 endif |
17445 | 88 endif |
7322 | 89 |
17445 | 90 ## Matlab draws compass plots with the arrow head as one continous line, |
17471
997b700b6ad4
compass.m: Add %!error input validation tests.
Rik <rik@octave.org>
parents:
17445
diff
changeset
|
91 ## and each arrow separately. This is completely different from quiver |
17445 | 92 ## and quite ugly. |
7322 | 93 n = length (u); |
94 xend = u; | |
95 xtmp = u .* (1 - arrowsize); | |
96 yend = v; | |
97 ytmp = v .* (1 - arrowsize); | |
17445 | 98 x = [zeros(1, n); xend; xtmp - v * arrowsize / 3; xend; ... |
7322 | 99 xtmp + v * arrowsize / 3]; |
17445 | 100 y = [zeros(1, n); yend; ytmp + u * arrowsize / 3; yend; ... |
7322 | 101 ytmp - u * arrowsize / 3]; |
102 [r, p] = cart2pol (x, y); | |
103 | |
17211
87ba70043bfc
Don't use ifelse in plot fcns to avoid unnecessary fcn evaluations.
Rik <rik@octave.org>
parents:
17126
diff
changeset
|
104 oldfig = []; |
17301
68bcac3c043a
Correct inversion accidentally introduced in cset 87ba70043bfc.
Rik <rik@octave.org>
parents:
17211
diff
changeset
|
105 if (! isempty (hax)) |
17211
87ba70043bfc
Don't use ifelse in plot fcns to avoid unnecessary fcn evaluations.
Rik <rik@octave.org>
parents:
17126
diff
changeset
|
106 oldfig = get (0, "currentfigure"); |
87ba70043bfc
Don't use ifelse in plot fcns to avoid unnecessary fcn evaluations.
Rik <rik@octave.org>
parents:
17126
diff
changeset
|
107 endif |
7322 | 108 unwind_protect |
17063
f17d9a574645
compass.m: Overhaul to use new __plt_get_axis_arg__.
Rik <rik@octave.org>
parents:
14335
diff
changeset
|
109 hax = newplot (hax); |
17126
26589abbc78d
Don't pass axis handle unnecessarily from high level to low level plot functions.
Rik <rik@octave.org>
parents:
17122
diff
changeset
|
110 hlist = polar (r, p, line_spec); |
7322 | 111 unwind_protect_cleanup |
17063
f17d9a574645
compass.m: Overhaul to use new __plt_get_axis_arg__.
Rik <rik@octave.org>
parents:
14335
diff
changeset
|
112 if (! isempty (oldfig)) |
f17d9a574645
compass.m: Overhaul to use new __plt_get_axis_arg__.
Rik <rik@octave.org>
parents:
14335
diff
changeset
|
113 set (0, "currentfigure", oldfig); |
f17d9a574645
compass.m: Overhaul to use new __plt_get_axis_arg__.
Rik <rik@octave.org>
parents:
14335
diff
changeset
|
114 endif |
7322 | 115 end_unwind_protect |
116 | |
117 if (nargout > 0) | |
17063
f17d9a574645
compass.m: Overhaul to use new __plt_get_axis_arg__.
Rik <rik@octave.org>
parents:
14335
diff
changeset
|
118 h = hlist; |
7322 | 119 endif |
120 | |
121 endfunction | |
122 | |
11363
a0dfd7e8e3e2
Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
123 |
7322 | 124 %!demo |
14237
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
125 %! clf; |
11363
a0dfd7e8e3e2
Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
126 %! randn_9x1_data = [-2.555884; 0.394974; -0.191871; -1.147024; 1.355425; -0.437335; -0.014370; -0.941312; 1.240300]; |
a0dfd7e8e3e2
Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
127 %! randn_1x9_data = [1.42934, -1.10821, -1.70404, 0.63357, -0.68337, -1.19771, -0.96502, -1.12810, 0.22457]; |
a0dfd7e8e3e2
Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
128 %! a = toeplitz ([1;randn_9x1_data], [1,randn_1x9_data]); |
a0dfd7e8e3e2
Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
129 %! compass (eig (a)); |
a0dfd7e8e3e2
Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents:
10793
diff
changeset
|
130 |
17471
997b700b6ad4
compass.m: Add %!error input validation tests.
Rik <rik@octave.org>
parents:
17445
diff
changeset
|
131 %% Test input validation |
997b700b6ad4
compass.m: Add %!error input validation tests.
Rik <rik@octave.org>
parents:
17445
diff
changeset
|
132 %!error compass () |
997b700b6ad4
compass.m: Add %!error input validation tests.
Rik <rik@octave.org>
parents:
17445
diff
changeset
|
133 %!error compass (1,2,3,4) |
997b700b6ad4
compass.m: Add %!error input validation tests.
Rik <rik@octave.org>
parents:
17445
diff
changeset
|
134 %!error compass (1, "-r", 2) |
997b700b6ad4
compass.m: Add %!error input validation tests.
Rik <rik@octave.org>
parents:
17445
diff
changeset
|
135 %!error <invalid linestyle STYLE> compass (1, "abc") |
997b700b6ad4
compass.m: Add %!error input validation tests.
Rik <rik@octave.org>
parents:
17445
diff
changeset
|
136 %!error <invalid linestyle STYLE> compass (1, {1}) |
997b700b6ad4
compass.m: Add %!error input validation tests.
Rik <rik@octave.org>
parents:
17445
diff
changeset
|
137 |