Mercurial > octave
view scripts/plot/draw/trisurf.m @ 28912:0de38a6ef693
maint: Use Octave convention of space after function name in scripts dir.
* cplxpair.m, gradient.m, integral.m, integral3.m, interp2.m, interpft.m,
num2str.m, pol2cart.m, quad2d.m, quadgk.m, quadl.m, repelem.m, sph2cart.m,
convhull.m, delaunay.m, delaunayn.m, movegui.m, print_usage.m,
__strip_html_tags__.m, colormap.m, gray2ind.m, imformats.m, importdata.m,
javachk.m, condest.m, isbanded.m, krylov.m, lscov.m, rref.m, inputParser.m,
publish.m, symvar.m, validateattributes.m, ode15i.m, ode15s.m, ode23.m,
ode23s.m, ode45.m, fminbnd.m, fminsearch.m, glpk.m, qp.m, get_forge_pkg.m,
installed_packages.m, annotation.m, axis.m, camorbit.m, campos.m, camva.m,
camzoom.m, daspect.m, legend.m, pbaspect.m, __gnuplot_legend__.m, light.m,
patch.m, plotyy.m, __pie__.m, reducepatch.m, ribbon.m, streamline.m, trisurf.m,
figure.m, ndgrid.m, __gnuplot_draw_axes__.m, __opengl_print__.m, padecoef.m,
polygcd.m, ppval.m, spline.m, union.m, bicg.m, bicgstab.m, cgs.m, eigs.m,
gmres.m, pcg.m, pcr.m, __alltohandles__.m, __sprand__.m, qmr.m, tfqmr.m,
betaincinv.m, cosint.m, gammainc.m, discrete_cdf.m, discrete_inv.m,
discrete_rnd.m, base2dec.m, strtok.m, compare_plot_demos.m,
html_compare_plot_demos.m, speed.m, test.m, weboptions.m, webread.m, webwrite.m:
Use Octave convention of space after function name and before '(' in scripts
directory.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 13 Oct 2020 18:17:29 -0700 |
parents | 90fea9cc9caa |
children | b73a54c31152 |
line wrap: on
line source
######################################################################## ## ## Copyright (C) 2007-2020 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or <https://octave.org/copyright/>. ## ## 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 3 of the License, 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, see ## <https://www.gnu.org/licenses/>. ## ######################################################################## ## -*- texinfo -*- ## @deftypefn {} {} trisurf (@var{tri}, @var{x}, @var{y}, @var{z}, @var{c}) ## @deftypefnx {} {} trisurf (@var{tri}, @var{x}, @var{y}, @var{z}) ## @deftypefnx {} {} trisurf (@dots{}, @var{prop}, @var{val}, @dots{}) ## @deftypefnx {} {@var{h} =} trisurf (@dots{}) ## Plot a 3-D triangular surface. ## ## In contrast to @code{surf}, which plots a surface mesh using rectangles, ## @code{trisurf} plots the mesh using triangles. ## ## @var{tri} is typically the output of a Delaunay triangulation over the ## grid of @var{x}, @var{y}. Every row of @var{tri} represents one triangle ## and contains three indices into [@var{x}, @var{y}] which are the vertices of ## the triangles in the x-y plane. @var{z} determines the height above the ## plane of each vertex. ## ## The color of the trisurf is computed by linearly scaling the @var{z} values ## to fit the range of the current colormap. Use @code{caxis} and/or change ## the colormap to control the appearance. ## ## Optionally, the color of the mesh can be specified independently of @var{z} ## by supplying @var{c}, which is a vector for colormap data, or a matrix with ## three columns for RGB data. The number of colors specified in @var{c} must ## either equal the number of vertices in @var{z} or the number of triangles ## in @var{tri}. When specifying the color at each vertex the triangle will ## be colored according to the color of the first vertex only (see patch ## documentation and the @qcode{"FaceColor"} property when set to ## @qcode{"flat"}). ## ## Any property/value pairs are passed directly to the underlying patch object. ## The full list of properties is documented at @ref{Patch Properties}. ## ## The optional return value @var{h} is a graphics handle to the created patch ## object. ## @seealso{surf, triplot, trimesh, delaunay, patch, shading} ## @end deftypefn function h = trisurf (tri, x, y, z, varargin) if (nargin < 4) print_usage (); endif if (nargin > 4 && isnumeric (varargin{1})) c = varargin{1}; varargin(1) = []; if (isvector (c)) c = c(:); end if (rows (c) != numel (z) && rows (c) != rows (tri)) error ("trisurf: the numbers of colors specified in C must equal the number of vertices in Z or the number of triangles in TRI"); elseif (columns (c) != 1 && columns (c) != 3) error ("trisurf: TrueColor C matrix must have 3 columns"); endif else c = z(:); endif ## For Matlab compatibility: if (! any (strcmpi (varargin, "FaceColor"))) varargin(end+(1:2)) = {"FaceColor", "flat"}; endif hax = newplot (); htmp = patch ("Faces", tri, "Vertices", [x(:), y(:), z(:)], "FaceVertexCData", c, varargin{:}); if (! ishold ()) set (hax, "view", [-37.5, 30], "xgrid", "on", "ygrid", "on", "zgrid", "on"); endif if (nargout > 0) h = htmp; endif endfunction %!demo %! clf; %! colormap ("default"); %! N = 31; %! [x, y] = meshgrid (1:N); %! tri = delaunay (x(:), y(:)); %! z = peaks (N); %! h = trisurf (tri, x, y, z, "facecolor", "flat"); %! axis tight; %! zlim auto; %! title ({"trisurf() of peaks() function", 'facecolor = "flat"'}); %!demo %! clf; %! colormap ("default"); %! N = 31; %! [x, y] = meshgrid (1:N); %! tri = delaunay (x(:), y(:)); %! z = peaks (N); %! h = trisurf (tri, x, y, z, "facecolor", "interp"); %! axis tight; %! zlim auto; %! title ({"trisurf() of peaks() function", 'facecolor = "interp"'}); %!demo %! clf; %! colormap ("default"); %! old_state = rand ("state"); %! restore_state = onCleanup (@() rand ("state", old_state)); %! rand ("state", 10); %! N = 10; %! x = 3 - 6 * rand (N, N); %! y = 3 - 6 * rand (N, N); %! z = peaks (x, y); %! tri = delaunay (x(:), y(:)); %! trisurf (tri, x(:), y(:), z(:)); %! title ("trisurf () of sparsely-sampled triangulation of peaks ()"); %!demo %! clf; %! colormap ("default"); %! x = rand (100, 1); %! y = rand (100, 1); %! z = x.^2 + y.^2; %! tri = delaunay (x, y); %! trisurf (tri, x, y, z); %! title ({"trisurf() of random data", 'default "facecolor" = "flat", "edgecolor" = "black"'}); %!demo %! clf; %! colormap ("default"); %! x = rand (100, 1); %! y = rand (100, 1); %! z = x.^2 + y.^2; %! tri = delaunay (x, y); %! trisurf (tri, x, y, z, "facecolor", "interp"); %! title ({"trisurf() of random data", '"facecolor" = "interp"'}); %!demo %! clf; %! colormap ("default"); %! x = rand (100, 1); %! y = rand (100, 1); %! z = x.^2 + y.^2; %! tri = delaunay (x, y); %! trisurf (tri, x, y, z, "facecolor", "interp", "edgecolor", "w"); %! title ({"trisurf() of random data", '"facecolor" = "interp", "edgecolor" = "white"'}); ## Test input validation %!error <Invalid call> trisurf () %!error <Invalid call> trisurf (1) %!error <Invalid call> trisurf (1,2) %!error <Invalid call> trisurf (1,2,3) %!error <the numbers of colors> trisurf (1,2,3,4,[5 6]) %!error <the numbers of colors> trisurf (1,2,3,4,[5 6]') %!error <the numbers of colors> trisurf ([1;1],[2;2],[3;3],[4;4], zeros (3,3)) %!error <TrueColor C matrix must have 3 columns> %! trisurf ([1;1],[2;2],[3;3],[4;4], zeros (2,2))