Mercurial > hg > octave-nkf
diff scripts/plot/meshgrid.m @ 5717:34cda7d94c08
[project @ 2006-03-27 22:26:18 by jwe]
author | jwe |
---|---|
date | Mon, 27 Mar 2006 22:26:21 +0000 |
parents | 2618a0750ae6 |
children | 34f96dd5441b |
line wrap: on
line diff
--- a/scripts/plot/meshgrid.m +++ b/scripts/plot/meshgrid.m @@ -21,13 +21,14 @@ ## @deftypefn {Function File} {[@var{xx}, @var{yy}, @var{zz}] =} meshgrid (@var{x}, @var{y}, @var{z}) ## @deftypefnx {Function File} {[@var{xx}, @var{yy}] =} meshgrid (@var{x}, @var{y}) ## @deftypefnx {Function File} {[@var{xx}, @var{yy}] =} meshgrid (@var{x}) -## Given vectors of @var{x}, @var{y}, and @var{z} coordinates, return -## three dimensional arrays corresponding to the @var{x}, @var{y}, and -## @var{z} coordinates of a mesh. Given only @var{x} and @var{y}, -## return matrices corresponding to the @var{x} and @var{y} coordinates -## of a mesh. The rows of @var{xx} are copies of @var{x}, and the -## columns of @var{yy} are copies of @var{y}. If @var{y} is omitted, -## then it is assumed to be the same as @var{x}. +## Given vectors of @var{x} and @var{y} and @var{z} coordinates, and +## returning 3 arguments, return three dimensional arrays corresponding +## to the @var{x}, @var{y}, and @var{z} coordinates of a mesh. When +## returning only 2 arguments, return matrices corresponding to the +## @var{x} and @var{y} coordinates of a mesh. The rows of @var{xx} are +## copies of @var{x}, and the columns of @var{yy} are copies of @var{y}. +## If @var{y} is omitted, then it is assumed to be the same as @var{x}, +## and @var{z} is assumed the same as @var{y}. ## @seealso{mesh, contour} ## @end deftypefn @@ -35,29 +36,35 @@ function [xx, yy, zz] = meshgrid (x, y, z) - if (nargin == 1) + if (nargin == 0 || nargin > 3) + usage ("[xx, yy, zz] = meshgrid (x, y, z)"); + endif + + if (nargin < 2) y = x; endif - if (nargin > 0 && nargin < 3) + + if (nargout < 3) if (isvector (x) && isvector (y)) xx = ones (length (y), 1) * x(:).'; yy = y(:) * ones (1, length (x)); else error ("meshgrid: arguments must be vectors"); endif - elseif (nargin == 3) - if (isvector (x) && isvector (y) && isvector (z)) - lenx = length (x); - leny = length (y); - lenz = length (z); - xx = repmat (ones (leny, 1) * x(:).', [1, 1, lenz]); - yy = repmat (y(:) * ones (1, lenx), [1, 1, lenz]); - zz = reshape (repmat (z(:).', lenx*leny, 1)(:), leny, lenx, lenz); - else - error ("meshgrid: arguments must be vectors"); - endif else - usage ("[xx, yy, zz] = meshgrid (x, y, z)"); + if (nargin < 3) + z = y; + endif + if (isvector (x) && isvector (y) && isvector (z)) + lenx = length (x); + leny = length (y); + lenz = length (z); + xx = repmat (ones (leny, 1) * x(:).', [1, 1, lenz]); + yy = repmat (y(:) * ones (1, lenx), [1, 1, lenz]); + zz = reshape (repmat (z(:).', lenx*leny, 1)(:), leny, lenx, lenz); + else + error ("meshgrid: arguments must be vectors"); + endif endif endfunction