Mercurial > octave
view scripts/plot/draw/streamline.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 | 7854d5752dd2 |
line wrap: on
line source
######################################################################## ## ## Copyright (C) 2019-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 {} {} streamline (@var{x}, @var{y}, @var{z}, @var{u}, @var{v}, @var{w}, @var{sx}, @var{sy}, @var{sz}) ## @deftypefnx {} {} streamline (@var{u}, @var{v}, @var{w}, @var{sx}, @var{sy}, @var{sz}) ## @deftypefnx {} {} streamline (@dots{}, @var{options}) ## @deftypefnx {} {} streamline (@var{hax}, @dots{}) ## @deftypefnx {} {@var{h} =} streamline (@dots{}) ## Plot streamlines of 2-D or 3-D vector fields. ## ## Plot streamlines of a 2-D or 3-D vector field given by ## @code{[@var{u}, @var{v}]} or @code{[@var{u}, @var{v}, @var{w}]}. The vector ## field is defined over a rectangular grid given by @code{[@var{x}, @var{y}]} ## or @code{[@var{x}, @var{y}, @var{z}]}. The streamlines start at the seed ## points @code{[@var{sx}, @var{sy}]} or @code{[@var{sx}, @var{sy}, @var{sz}]}. ## ## The input parameter @var{options} is a 2-D vector of the form ## @code{[@var{stepsize}, @var{max_vertices}]}. The first parameter ## specifies the step size used for trajectory integration (default 0.1). A ## negative value is allowed which will reverse the direction of integration. ## The second parameter specifies the maximum number of segments used to ## create a streamline (default 10,000). ## ## If the first argument @var{hax} is an axes handle, then plot into this axes, ## rather than the current axes returned by @code{gca}. ## ## The optional return value @var{h} is a graphics handle to the hggroup ## comprising the field lines. ## ## Example: ## ## @example ## @group ## [x, y] = meshgrid (-1.5:0.2:2, -1:0.2:2); ## u = - x / 4 - y; ## v = x - y / 4; ## streamline (x, y, u, v, 1.7, 1.5); ## @end group ## @end example ## ## @seealso{stream2, stream3, streamribbon, streamtube, ostreamtube} ## @end deftypefn function h = streamline (varargin) [hax, varargin, nargin] = __plt_get_axis_arg__ ("streamline", varargin{:}); if (nargin == 0) print_usage (); endif nd = ndims (varargin{1}); if (nd > 3) error ("streamline: input data must be 2-D or 3-D"); endif if (isempty (hax)) hax = gca (); else hax = hax(1); endif h = []; if (nd == 2) xy = stream2 (varargin{:}); for i = 1 : length (xy) sl = xy{i}; if (! isempty (sl)) htmp = line (hax, "xdata", sl(:, 1), "ydata", sl(:, 2), "color", "b"); h = [h; htmp]; endif endfor else xyz = stream3 (varargin{:}); for i = 1 : length (xyz) sl = xyz{i}; if (! isempty (sl)) htmp = line (hax, "xdata", sl(:, 1), "ydata", sl(:, 2), "zdata", sl(:, 3), "color", "b"); h = [h; htmp]; endif endfor endif endfunction %!demo %! clf; %! [x, y] = meshgrid (-2:0.5:2); %! u = - y - x / 2; %! v = x - y / 2; %! [sx, sy] = meshgrid (-2:2:2); %! h = streamline (x, y, u, v, sx, sy); %! set (h, "color", "r"); %! hold on; %! quiver (x, y, u, v); %! scatter (sx(:), sy(:), 20, "filled", "o", "markerfacecolor", "r"); %! title ("Spiral Sink"); %! grid on; %! axis equal; %!demo %! clf; %! [x, y, z] = meshgrid (-3:3); %! u = - x / 2 - y; %! v = x - y / 2; %! w = - z; %! [sx, sy, sz] = meshgrid (3, 0:1.5:1.5, 0:1.5:3); %! h = streamline (x, y, z, u, v, w, sx, sy, sz); %! set (h, "color", "r"); %! hold on; %! quiver3 (x, y, z, u, v, w); %! scatter3 (sx(:), sy(:), sz(:), 20, "filled", "o", "markerfacecolor", "r"); %! view (3); %! title ("Spiral Sink"); %! grid on; %! axis equal; %!demo %! clf; %! [x, y, z] = meshgrid (-1:0.4:1, -1:0.4:1, -3:0.3:0); %! a = 0.08; %! b = 0.04; %! u = - a * x - y; %! v = x - a * y; %! w = - b * ones (size (x)); %! hold on; %! sx = 1.0; %! sy = 0.0; %! sz = 0.0; %! plot3 (sx, sy, sz, ".r", "markersize", 15); %! t = linspace (0, 12 * 2 * pi (), 500); %! tx = exp (-a * t).*cos (t); %! ty = exp (-a * t).*sin (t); %! tz = - b * t; %! plot3 (tx, ty, tz, "-b"); %! h = streamline (x, y, z, u, v, w, sx, sy, sz); %! set (h, "color", "r"); %! view (3); %! title ("Heuns Scheme (red) vs. Analytical Solution (blue)"); %! grid on; %! axis equal tight; ## Test input validation %!error <Invalid call> streamline () %!error <Invalid call to streamline> %! hf = figure ("visible", "off"); %! unwind_protect %! hax = axes (); %! streamline (hax); %! unwind_protect_cleanup %! close (hf); %! end_unwind_protect %!error <input data must be 2-D or 3-D> streamline (ones (2,2,2,2))