diff scripts/plot/meshgrid.m @ 5378:b2a5596a3f7b

[project @ 2005-06-02 16:01:25 by jwe]
author jwe
date Thu, 02 Jun 2005 16:01:25 +0000
parents 4c8a2e4e0717
children e81543fdbe01
line wrap: on
line diff
--- a/scripts/plot/meshgrid.m
+++ b/scripts/plot/meshgrid.m
@@ -18,11 +18,16 @@
 ## 02110-1301, USA.
 
 ## -*- texinfo -*-
-## @deftypefn {Function File} {[@var{xx}, @var{yy}] =} meshgrid (@var{x}, @var{y})
+## @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} and @var{y} coordinates, return two 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}.
+## 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}.
 ## @end deftypefn
 ##
 ## @seealso{sombrero, plot, semilogx, semilogy, loglog, polar, mesh,
@@ -30,7 +35,7 @@
 
 ## Author: jwe
 
-function [xx, yy] = meshgrid (x, y)
+function [xx, yy, zz] = meshgrid (x, y, z)
 
   if (nargin == 1)
     y = x;
@@ -42,8 +47,19 @@
     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] = meshgrid (x, y)");
+    usage ("[xx, yy, zz] = meshgrid (x, y, z)");
   endif
 
 endfunction