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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
2 ##
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
3 ## This file is part of Octave.
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
4 ##
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
8 ## your option) any later version.
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
9 ##
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
13 ## General Public License for more details.
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
14 ##
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
17 ## <http://www.gnu.org/licenses/>.
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
18
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
21 ## @deftypefnx {Function File} {} feather (@var{z})
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
24 ## @deftypefnx {Function File} {@var{h} =} feather (@dots{})
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
25 ##
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
31 ##
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
40 ##
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
41 ## @example
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
45 ## @end group
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
46 ## @end example
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
47 ##
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
48 ## @seealso{plot, quiver, compass}
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
49 ## @end deftypefn
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
61 u = real (z);
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
71 endif
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
80 if (valid)
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9502
diff changeset
81 line_spec = arg;
7322
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
84 endif
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
87 endif
17483
bddb9688e41c feather.m: Overhaul function for Matlab visual compatibility.
Rik <rik@octave.org>
parents: 17473
diff changeset
88 endif
7322
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
92 ## quiver and quite ugly.
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
93 n = length (u);
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
94 xend = [1 : n] + u;
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
95 xtmp = [1 : n] + u .* (1 - arrowsize);
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
96 yend = v;
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
101 ytmp - u * arrowsize / 3];
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
114 end_unwind_protect
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
115
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
118 endif
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
119
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
120 endfunction
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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
40a17a87155e [project @ 2007-12-18 21:32:10 by jwe]
jwe
parents:
diff changeset
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