# HG changeset patch # User jwe # Date 1163442625 0 # Node ID 08f0dabf17b9d4bf5987edfa83a5278eaec9146e # Parent e60688a1ea0728afd5e099ac301e67545e54d625 [project @ 2006-11-13 18:30:25 by jwe] diff -r e60688a1ea07 -r 08f0dabf17b9 scripts/ChangeLog --- a/scripts/ChangeLog Mon Nov 13 17:30:55 2006 +0000 +++ b/scripts/ChangeLog Mon Nov 13 18:30:25 2006 +0000 @@ -1,3 +1,7 @@ +2006-11-13 Søren Hauberg + + * plot/mesh.m: Simplify. Set hidden3d for the plot. + 2006-11-11 Søren Hauberg * miscellaneous/copyfile.m: Fix docs to match function. diff -r e60688a1ea07 -r 08f0dabf17b9 scripts/plot/mesh.m --- a/scripts/plot/mesh.m Mon Nov 13 17:30:55 2006 +0000 +++ b/scripts/plot/mesh.m Mon Nov 13 18:30:25 2006 +0000 @@ -19,7 +19,7 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} mesh (@var{x}, @var{y}, @var{z}) -## Plot a mesh given matrices @var{x}, and @var{y} from @code{meshdom} and +## Plot a mesh given matrices @var{x}, and @var{y} from @code{meshgrid} and ## a matrix @var{z} corresponding to the @var{x} and @var{y} coordinates of ## the mesh. If @var{x} and @var{y} are vectors, then a typical vertex ## is (@var{x}(j), @var{y}(i), @var{z}(i,j)). Thus, columns of @var{z} @@ -32,78 +32,26 @@ function mesh (x, y, z) - ## FIXME -- the plot states should really just be set - ## temporarily, probably inside an unwind_protect block, but there is - ## no way to determine their current values. - if (nargin == 1) z = x; if (ismatrix (z)) - __gnuplot_raw__ ("set hidden3d;\n"); - __gnuplot_raw__ ("set data style lines;\n"); - __gnuplot_raw__ ("set surface;\n"); - __gnuplot_raw__ ("set nocontour;\n"); - __gnuplot_set__ noparametric; - __gnuplot_raw__ ("set nologscale;\n"); - __gnuplot_raw__ ("set view 60, 30, 1, ;\n"); - __plt3__ (z', ""); + [x, y] = meshgrid(0:columns(z)-1, 0:rows(z)-1); else error ("mesh: argument must be a matrix"); endif elseif (nargin == 3) if (isvector (x) && isvector (y) && ismatrix (z)) - xlen = length (x); - ylen = length (y); - if (xlen == columns (z) && ylen == rows (z)) - if (rows (y) == 1) - y = y'; - endif - len = 3 * xlen; - zz = zeros (ylen, len); - k = 1; - for i = 1:3:len - zz(:,i) = x(k) * ones (ylen, 1); - zz(:,i+1) = y; - zz(:,i+2) = z(:,k); - k++; - endfor - __gnuplot_raw__ ("set hidden3d;\n"); - __gnuplot_raw__ ("set data style lines;\n"); - __gnuplot_raw__ ("set surface;\n"); - __gnuplot_raw__ ("set nocontour;\n"); - __gnuplot_raw__ ("set nologscale;\n"); - __gnuplot_set__ parametric; - __gnuplot_raw__ ("set view 60, 30, 1, 1;\n"); - __gnuplot_raw__ ("set palette defined (0 \"dark-blue\", 1 \"blue\", 2 \"cyan\", 3 \"yellow\", 4 \"red\" , 5 \"dark-red\");\n"); - __gnuplot_raw__ ("set nocolorbox;\n"); - __plt3__ (zz, "", "", "", [gnuplot_command_with " line palette"]); + if (rows (z) == length (y) && columns (z) == length (x)) + x = repmat(x(:)', length (y), 1); + y = repmat(y(:), 1, length (x)); 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); error (msg); endif elseif (ismatrix (x) && ismatrix (y) && ismatrix (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 - __gnuplot_raw__ ("set data style lines;\n"); - __gnuplot_raw__ ("set surface;\n"); - __gnuplot_raw__ ("set nocontour;\n"); - __gnuplot_raw__ ("set nologscale;\n"); - __gnuplot_set__ parametric; - __gnuplot_raw__ ("set view 60, 30, 1, 1;\n"); - __plt3__ (zz, ""); - else + if (ndims (x) != ndims (y) || ndims (x) != ndims (z) + || size (x) != size (y) || size (x) != size (z)) error ("mesh: x, y, and z must have same dimensions"); endif else @@ -113,4 +61,33 @@ print_usage (); endif + ## Show the mesh. + 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 + __gnuplot_raw__ ("set hidden3d;\n"); + __gnuplot_raw__ ("set data style lines;\n"); + __gnuplot_raw__ ("set surface;\n"); + __gnuplot_raw__ ("set nocontour;\n"); + __gnuplot_raw__ ("set nologscale;\n"); + __gnuplot_set__ parametric; + __gnuplot_raw__ ("set view 60, 30, 1, 1;\n"); + __gnuplot_raw__ ("set palette defined (0 \"dark-blue\", 1 \"blue\", 2 \"cyan\", 3 \"yellow\", 4 \"red\" , 5 \"dark-red\");\n"); + __gnuplot_raw__ ("set nocolorbox;\n"); + __plt3__ (zz, "", "", "", + sprintf ("%s line palette", gnuplot_command_with ())); + else + error ("mesh: x, y, and z must have same dimensions"); + endif + endfunction