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