From octave-maintainers-request at bevo dot che dot wisc dot edu Wed Mar 11 12:46:23 1998 Subject: Matlab-like view() function From: hopfgartner at rolmail dot net To: octave-maintainers at bevo dot che dot wisc dot edu Date: Wed, 11 Mar 1998 20:51:04 +0100 This is a multi-part message in MIME format. --------------92C04D14D4B2853BCD7E9FE5 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hi, I've attached the the m-filr that implements and a modified (from 2.1.5) mesh.m file where the gnuplot gsets have been substituted with view(); It implements a subset of the MatLab view function, but it was just that what I needed. For JWE: I started looking into gtk-- to see if we could get a nice GUI for the plotting, but I'm very slow since I'm a lot at work these days, sorry. Suggestion: should we take the spline function that comes with plotutils? Question: Have you had a look at gsl-0.3a.tar.gz on alpha.gnu.org, seems to be a junior Octave-lib! Regards, Peter --------------92C04D14D4B2853BCD7E9FE5 Content-Type: text/plain; charset=us-ascii; name="mesh.m" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="mesh.m" ## Copyright (C) 1996, 1997 John W. Eaton ## ## This file is part of Octave. ## ## Octave is free software; you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## 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. ## usage: mesh (x, y, z) ## ## 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 ## Author: jwe function mesh (x, y, z) ## XXX FIXME XXX -- 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 (is_matrix (z)) gset hidden3d; gset data style lines; gset surface; gset nocontour; gset noparametric; view(); gsplot (z'); else error ("mesh: argument must be a matrix"); endif elseif (nargin == 3) if (is_vector (x) && is_vector (y) && is_matrix (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 gset hidden3d; gset data style lines; gset surface; gset nocontour; gset parametric; view(); gsplot (zz); gset noparametric; else 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 gset hidden3d; gset data style lines; gset surface; gset nocontour; gset parametric; view(); gsplot (zz); gset noparametric; 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 else usage ("mesh (z)"); endif endfunction --------------92C04D14D4B2853BCD7E9FE5 Content-Type: text/plain; charset=us-ascii; name="view.m" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="view.m" ## Copyright (C) 1996 John W. Eaton ## ## This file is part of Octave. ## ## Octave is free software; you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## 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. ## usage: view(azimuth, elevation) ## ## Sets the viewpoint for a 3D surface plot. ## ## view([azimuth, elevation]) same as above ## ## [ret_az, ret_el] = view() sends the actual viewpoint to ## gnuplot and places it in [ret_az, ret_el]. ## ## view(2) sets the viewpoint along the x axis ## view(3) sets the azimuth = 360 - 37.5 and elevation = 30 ## ## NOTE: Doesn't implement the full functionality of the Matlab ## equivalent yet. ## ## Input: ## azimuth : Rotation around z-axis ## elevation : Rotation around x-axis ## ## Author: Peter Hopfgartner (hopfgartner at rolmail dot net) function [ret_az, ret_el] = view (azimuth, elevation) ## global variables to keep track of view options global __view_azimuth__ = - 37.5 + 360; global __view_elevation__ = 30; if (nargin == 0) elseif (nargin == 1 && azimuth == 2) __view_azimuth__ = 0; __view_elevation__ = 90; elseif (nargin == 1 && azimuth == 3) __view_azimuth__ = -37.5 + 360; __view_elevation__ = 30; elseif (nargin == 1 && size(azimuth) == [1,2]) __view_azimuth__ = azimuth(1); __view_elevation__ = azimuth(2); elseif (nargin == 2 && is_scalar(azimuth) && is_scalar(elevation)) __view_azimuth__ = azimuth; __view_elevation__ = elevation; else usage ("view (azimuth, elevation) or view ([azimuth, elevation])"); endif if (__view_azimuth__ < 0 || __view_azimuth__ > 360) error ("azimuth must be in [0, 360]"); elseif (__view_elevation__ < 0 || __view_elevation__ > 180) error ("elevation must be in [0, 180]"); endif eval (sprintf("gset view %4.1f, %4.1f", __view_elevation__, \ __view_azimuth__ )); ret_az = __view_azimuth__; ret_el = __view_elevation__; endfunction --------------92C04D14D4B2853BCD7E9FE5--