changeset 1712:26a5b528968c

[project @ 1996-01-08 02:15:53 by jwe]
author jwe
date Mon, 08 Jan 1996 02:15:53 +0000
parents 4d552a89ceaa
children d9e42d0bab09
files scripts/plot/mesh.m
diffstat 1 files changed, 45 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/plot/mesh.m	Mon Jan 08 01:13:57 1996 +0000
+++ b/scripts/plot/mesh.m	Mon Jan 08 02:15:53 1996 +0000
@@ -14,14 +14,20 @@
 # 
 # You should have received a copy of the GNU General Public License
 # along with Octave; see the file COPYING.  If not, write to the Free
-# Software Foundation, 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+# Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 
 function mesh (x, y, z)
 
 # usage: mesh (x, y, z)
 #
-# See also: plot, semilogx, semilogy, loglog, polar, meshdom, contour,
-#           bar, stairs, gplot, gsplot, replot, xlabel, ylabel, title 
+# Surface plot.  If x, y, and z are matrices with the same dimensions,
+# then corresponding elements represent vertices of the plot.  If x and
+# y are vectors, then a typical vertex is (x(j), y(i), z(i,j)).  Thus,
+# columns of z correspond to different x values and rows of z correspond
+# to different y values.
+#
+# See also: plot, semilogx, semilogy, loglog, polar, meshgrid, meshdom, 
+#           contour, bar, stairs, gplot, gsplot, replot, xlabel, ylabel, title 
 
   if (nargin == 1)
     z = x;
@@ -31,8 +37,8 @@
       set surface;
       set nocontour;
       set noparametric;
-      set view 60, 30, 1, 1;
-      gsplot (z);
+      set view 60, 30, 1, 1
+      gsplot (z');
     else
       error ("mesh: argument must be a matrix");
     endif
@@ -40,16 +46,16 @@
     if (is_vector (x) && is_vector (y) && is_matrix (z))
       xlen = length (x);
       ylen = length (y);
-      if (ylen == rows (z) && xlen == columns (z))
-        if (rows (x) == 1)
-          x = x';
+      if (xlen == columns (z) && ylen == rows (z))
+        if (rows (y) == 1)
+          y = y';
         endif
-        len = 3 * ylen;
-        zz = zeros (xlen, ylen);
+        len = 3 * xlen;
+        zz = zeros (ylen, len);
         k = 1;
         for i = 1:3:len
-          zz(:,i)   = x;
-          zz(:,i+1) = y(k) * ones (xlen, 1);
+          zz(:,i)   = x(k) * ones (ylen, 1);
+          zz(:,i+1) = y;
           zz(:,i+2) = z(:,k);
           k++;
         endfor
@@ -58,13 +64,37 @@
         set surface;
         set nocontour;
 	set parametric;
-        set view 60, 30, 1, 1;
+        set view 60, 30, 1, 1
 	gsplot (zz);
       else
-        msg = "mesh: rows (z) must be the same as length (y) and";
-        msg = sprintf ("%s\ncolumns (z) must be the same as length (x)", msg);
+        msg = "mesh: rows (z) must be the same as length (x) and";
+        msg = sprintf ("%s\ncolumns (z) must be the same as length (y)", msg);
         error (msg);
       endif
+    elseif (is_matrix (x) && is_matrix (y) && is_matrix (z))
+      xlen = columns (z);
+      ylen = rows (z);
+      if (xlen == columns (x) && xlen == columns (y) &&
+	ylen == rows (x) && ylen == rows(y))
+        len = 3 * xlen;
+        zz = zeros (ylen, len);
+        k = 1;
+        for i = 1:3:len
+          zz(:,i)   = x(:,k);
+          zz(:,i+1) = y(:,k);
+          zz(:,i+2) = z(:,k);
+          k++;
+        endfor
+	set hidden3d;
+	set data style lines;
+        set surface;
+        set nocontour;
+	set parametric;
+        set view 60, 30, 1, 1
+	gsplot (zz);
+      else
+        error ("mesh: x, y, and z must have same dimensions");
+      endif
     else
       error ("mesh: x and y must be vectors and z must be a matrix");
     endif