Mercurial > hg > octave-lyh
annotate scripts/plot/feather.m @ 8874:bd1b1fe9c6e9 ss-3-1-53
bump version info for snapshot
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 25 Feb 2009 18:35:47 -0500 |
parents | a2d9f325b65a |
children | eb63fbe60fab |
rev | line source |
---|---|
7322 | 1 ## Copyright (C) 2007 David Bateman |
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} {} feather (@var{u}, @var{v}) | |
21 ## @deftypefnx {Function File} {} feather (@var{z}) | |
22 ## @deftypefnx {Function File} {} feather (@dots{}, @var{style}) | |
23 ## @deftypefnx {Function File} {} feather (@var{h}, @dots{}) | |
24 ## @deftypefnx {Function File} {@var{h} =} feather (@dots{}) | |
25 ## | |
26 ## Plot the @code{(@var{u}, @var{v})} components of a vector field emanating | |
27 ## from equidistant points on the x-axis. If a single complex argument | |
28 ## @var{z} is given, then @code{@var{u} = real (@var{z})} and | |
29 ## @code{@var{v} = imag (@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 ## phi = [0 : 15 : 360] * pi / 180; | |
40 ## feather (sin (phi), cos (phi)) | |
41 ## @end group | |
42 ## @end example | |
43 ## | |
44 ## @seealso{plot, quiver, compass} | |
45 ## @end deftypefn | |
46 | |
47 function retval = feather (varargin) | |
48 | |
49 [h, varargin, nargin] = __plt_get_axis_arg__ ("feather", varargin{:}); | |
50 | |
51 arrowsize = 0.25; | |
52 firstnonnumeric = Inf; | |
53 for i = 1:nargin | |
54 if (! isnumeric (varargin{i})) | |
55 firstnonnumeric = i; | |
56 break; | |
57 endif | |
58 endfor | |
59 | |
60 if (nargin < 2 || firstnonnumeric < 2) | |
61 ioff = 2; | |
62 z = varargin {1} (:) .'; | |
63 u = real (z); | |
64 v = imag (z); | |
65 else | |
66 ioff = 3; | |
67 u = varargin {1} (:) .'; | |
68 v = varargin {2} (:) .'; | |
69 endif | |
70 | |
71 line_spec = "b-"; | |
72 while (ioff <= nargin) | |
73 arg = varargin{ioff++}; | |
7768
a2d9f325b65a
Use isschar instead of deprecated isstr
Rafael Laboissiere <rafael@debian.org>
parents:
7322
diff
changeset
|
74 if ((ischar (arg) || iscell (arg)) && ! have_line_spec) |
7322 | 75 [linespec, valid] = __pltopt__ ("feather", arg, false); |
76 if (valid) | |
77 line_spec = arg; | |
78 break; | |
79 else | |
80 error ("feather: invalid linespec"); | |
81 endif | |
82 else | |
83 error ("feather: unrecognized argument"); | |
84 endif | |
85 endwhile | |
86 | |
87 ## Matlab draws feather plots, with the arrow head as one continous | |
88 ## line, and each arrow separately. This is completely different than | |
89 ## quiver and quite ugly. | |
90 n = length (u); | |
91 xend = [1 : n] + u; | |
92 xtmp = [1 : n] + u .* (1 - arrowsize); | |
93 yend = v; | |
94 ytmp = v .* (1 - arrowsize); | |
95 x = [[1 : n]; xend; xtmp - v * arrowsize; xend; ... | |
96 xtmp + v * arrowsize]; | |
97 y = [zeros(1, n); yend; ytmp + u * arrowsize / 3; yend; ... | |
98 ytmp - u * arrowsize / 3]; | |
99 | |
100 oldh = gca (); | |
101 unwind_protect | |
102 axes (h); | |
103 newplot (); | |
104 hlist = plot (h, x, y, line_spec, [1, n], [0, 0], line_spec); | |
105 unwind_protect_cleanup | |
106 axes (oldh); | |
107 end_unwind_protect | |
108 | |
109 if (nargout > 0) | |
110 retval = hlist; | |
111 endif | |
112 | |
113 endfunction | |
114 | |
115 %!demo | |
116 %! phi = [0 : 15 : 360] * pi / 180; | |
117 %! feather (sin (phi), cos (phi)) |