Mercurial > hg > octave-lyh
annotate scripts/plot/feather.m @ 17483:bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
* scripts/plot/feather.m: Reduce length of arrowhead size to 0.20 of arrow
shaft. Change arrow head angle with shaft from 45 to 30 degrees. Use variable
'h' instead of 'retval' to match documentation. Redo input validation.
Add %!error input validation tests.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 24 Sep 2013 13:17:04 -0700 |
parents | 177147bf7b55 |
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} {} feather (@var{u}, @var{v}) |
7322 | 21 ## @deftypefnx {Function File} {} feather (@var{z}) |
22 ## @deftypefnx {Function File} {} feather (@dots{}, @var{style}) | |
17169
52931d71400f
doc: Document that first argument can be an axes handle for several plot functions.
Rik <rik@octave.org>
parents:
17130
diff
changeset
|
23 ## @deftypefnx {Function File} {} feather (@var{hax}, @dots{}) |
7322 | 24 ## @deftypefnx {Function File} {@var{h} =} feather (@dots{}) |
25 ## | |
26 ## Plot the @code{(@var{u}, @var{v})} components of a vector field emanating | |
17126
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17071
diff
changeset
|
27 ## from equidistant points on the x-axis. |
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17071
diff
changeset
|
28 ## |
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17071
diff
changeset
|
29 ## If a single complex argument @var{z} is given, then |
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17071
diff
changeset
|
30 ## @code{@var{u} = real (@var{z})} and @code{@var{v} = imag (@var{z})}. |
7322 | 31 ## |
32 ## The style to use for the plot can be defined with a line style @var{style} | |
17126
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
17071
diff
changeset
|
33 ## of the same format as the @code{plot} command. |
7322 | 34 ## |
17169
52931d71400f
doc: Document that first argument can be an axes handle for several plot functions.
Rik <rik@octave.org>
parents:
17130
diff
changeset
|
35 ## If the first argument @var{hax} is an axes handle, then plot into this axis, |
52931d71400f
doc: Document that first argument can be an axes handle for several plot functions.
Rik <rik@octave.org>
parents:
17130
diff
changeset
|
36 ## rather than the current axes returned by @code{gca}. |
52931d71400f
doc: Document that first argument can be an axes handle for several plot functions.
Rik <rik@octave.org>
parents:
17130
diff
changeset
|
37 ## |
14001
5f0bb45e615c
doc: Update documentation for functions returning a graphics handle h (Bug #34761)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
38 ## 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
|
39 ## line objects representing the drawn vectors. |
7322 | 40 ## |
41 ## @example | |
42 ## @group | |
14327
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
43 ## phi = [0 : 15 : 360] * pi/180; |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
44 ## feather (sin (phi), cos (phi)); |
7322 | 45 ## @end group |
46 ## @end example | |
47 ## | |
48 ## @seealso{plot, quiver, compass} | |
49 ## @end deftypefn | |
50 | |
17483
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
51 function h = feather (varargin) |
7322 | 52 |
17071
e89fd58a6e84
feather.m: Update to use new __plt_get_axis_arg__.
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
14335
diff
changeset
|
53 [hax, varargin, nargin] = __plt_get_axis_arg__ ("feather", varargin{:}); |
7322 | 54 |
17483
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
55 if (nargin == 0 || nargin > 3) |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
56 print_usage (); |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
57 endif |
7322 | 58 |
17483
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
59 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
|
60 z = varargin{1}(:).'; |
7322 | 61 u = real (z); |
62 v = imag (z); | |
17483
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
63 have_line_spec = (nargin == 2); |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
64 elseif (nargin >= 2 && isnumeric (varargin{2})) |
7322 | 65 ioff = 3; |
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}(:).'; |
17483
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
68 have_line_spec = (nargin == 3); |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
69 else |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
70 print_usage (); |
7322 | 71 endif |
72 | |
17483
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
73 arrowsize = 0.20; |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
74 line_spec = "-b"; |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
75 |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
76 if (have_line_spec) |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
77 arg = varargin{end}; |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
78 if (ischar (arg) || iscellstr (arg)) |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
79 [~, valid] = __pltopt__ ("feather", arg, false); |
7322 | 80 if (valid) |
10549 | 81 line_spec = arg; |
7322 | 82 else |
17483
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
83 error ("feather: invalid linestyle STYLE"); |
7322 | 84 endif |
85 else | |
17483
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
86 error ("feather: invalid linestyle STYLE"); |
7322 | 87 endif |
17483
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
88 endif |
7322 | 89 |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
90 ## Matlab draws feather plots, with the arrow head as one continous |
17483
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
91 ## line, and each arrow separately. This is completely different from |
7322 | 92 ## quiver and quite ugly. |
93 n = length (u); | |
94 xend = [1 : n] + u; | |
95 xtmp = [1 : n] + u .* (1 - arrowsize); | |
96 yend = v; | |
97 ytmp = v .* (1 - arrowsize); | |
17483
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
98 x = [[1 : n]; xend; xtmp - v * arrowsize / 3; xend; ... |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
99 xtmp + v * arrowsize / 3]; |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
100 y = [zeros(1, n); yend; ytmp + u * arrowsize / 3; yend; ... |
7322 | 101 ytmp - u * arrowsize / 3]; |
102 | |
17219
87ba70043bfc
Don't use ifelse in plot fcns to avoid unnecessary fcn evaluations.
Rik <rik@octave.org>
parents:
17198
diff
changeset
|
103 oldfig = []; |
17309
68bcac3c043a
Correct inversion accidentally introduced in cset 87ba70043bfc.
Rik <rik@octave.org>
parents:
17219
diff
changeset
|
104 if (! isempty (hax)) |
17219
87ba70043bfc
Don't use ifelse in plot fcns to avoid unnecessary fcn evaluations.
Rik <rik@octave.org>
parents:
17198
diff
changeset
|
105 oldfig = get (0, "currentfigure"); |
87ba70043bfc
Don't use ifelse in plot fcns to avoid unnecessary fcn evaluations.
Rik <rik@octave.org>
parents:
17198
diff
changeset
|
106 endif |
7322 | 107 unwind_protect |
17071
e89fd58a6e84
feather.m: Update to use new __plt_get_axis_arg__.
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
14335
diff
changeset
|
108 hax = newplot (hax); |
17130
26589abbc78d
Don't pass axis handle unnecessarily from high level to low level plot functions.
Rik <rik@octave.org>
parents:
17126
diff
changeset
|
109 hlist = plot (x, y, line_spec, [1, n], [0, 0], line_spec); |
7322 | 110 unwind_protect_cleanup |
17071
e89fd58a6e84
feather.m: Update to use new __plt_get_axis_arg__.
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
14335
diff
changeset
|
111 if (! isempty (oldfig)) |
e89fd58a6e84
feather.m: Update to use new __plt_get_axis_arg__.
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
14335
diff
changeset
|
112 set (0, "currentfigure", oldfig); |
e89fd58a6e84
feather.m: Update to use new __plt_get_axis_arg__.
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
14335
diff
changeset
|
113 endif |
7322 | 114 end_unwind_protect |
115 | |
116 if (nargout > 0) | |
17483
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
117 h = hlist; |
7322 | 118 endif |
119 | |
120 endfunction | |
121 | |
14001
5f0bb45e615c
doc: Update documentation for functions returning a graphics handle h (Bug #34761)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
122 |
7322 | 123 %!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
|
124 %! clf; |
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
125 %! phi = [0 : 15 : 360] * pi/180; |
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
126 %! feather (sin (phi), cos (phi)); |
17198
df4c4b7708a4
Add titles and clean-up plotting %!demos.
Rik <rik@octave.org>
parents:
17169
diff
changeset
|
127 %! axis tight; |
df4c4b7708a4
Add titles and clean-up plotting %!demos.
Rik <rik@octave.org>
parents:
17169
diff
changeset
|
128 %! title ('feather plot'); |
14001
5f0bb45e615c
doc: Update documentation for functions returning a graphics handle h (Bug #34761)
Rik <octave@nomad.inbox5.com>
parents:
11587
diff
changeset
|
129 |
17483
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
130 %% Test input validation |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
131 %!error feather () |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
132 %!error feather (1,2,3,4) |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
133 %!error feather (1, "-r", 2) |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
134 %!error <invalid linestyle STYLE> feather (1, "abc") |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
135 %!error <invalid linestyle STYLE> feather (1, {1}) |
bddb9688e41c
feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents:
17473
diff
changeset
|
136 |