X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=octave_packages%2Fgeometry-1.5.0%2Fgeom2d%2FdrawParabola.m;fp=octave_packages%2Fgeometry-1.5.0%2Fgeom2d%2FdrawParabola.m;h=b826b1e6e1c94b8b0bc31cd0ec5674b45d52352e;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hp=0000000000000000000000000000000000000000;hpb=1705066eceaaea976f010f669ce8e972f3734b05;p=CreaPhase.git diff --git a/octave_packages/geometry-1.5.0/geom2d/drawParabola.m b/octave_packages/geometry-1.5.0/geom2d/drawParabola.m new file mode 100644 index 0000000..b826b1e --- /dev/null +++ b/octave_packages/geometry-1.5.0/geom2d/drawParabola.m @@ -0,0 +1,142 @@ +%% Copyright (c) 2011, INRA +%% 2006-2011, David Legland +%% 2011 Adapted to Octave by Juan Pablo Carbajal +%% +%% All rights reserved. +%% (simplified BSD License) +%% +%% Redistribution and use in source and binary forms, with or without +%% modification, are permitted provided that the following conditions are met: +%% +%% 1. Redistributions of source code must retain the above copyright notice, this +%% list of conditions and the following disclaimer. +%% +%% 2. Redistributions in binary form must reproduce the above copyright notice, +%% this list of conditions and the following disclaimer in the documentation +%% and/or other materials provided with the distribution. +%% +%% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +%% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +%% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +%% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +%% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +%% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +%% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +%% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +%% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +%% POSSIBILITY OF SUCH DAMAGE. +%% +%% The views and conclusions contained in the software and documentation are +%% those of the authors and should not be interpreted as representing official +%% policies, either expressed or implied, of copyright holder. + +%% -*- texinfo -*- +%% @deftypefn {Function File} {@var{h} = } drawParabola (@var{parabola}) +%% @deftypefnx {Function File} {@var{h} = } drawParabola (@var{parabola}, @var{t}) +%% @deftypefnx {Function File} {@var{h} = } drawParabola (@dots{}, @var{param}, @var{value}) +%% Draw a parabola on the current axis. +%% +%% drawParabola(PARABOLA); +%% Draws a vertical parabola, defined by its vertex and its parameter. +%% Such a parabola admits a vertical axis of symetry. +%% +%% The algebraic equation of parabola is given by: +%% (Y - YV) = A * (X - VX)^2 +%% Where XV and YV are vertex coordinates and A is parabola parameter. +%% +%% A parametric equation of parabola is given by: +%% x(t) = t + VX; +%% y(t) = A * t^2 + VY; +%% +%% PARABOLA can also be defined by [XV YV A THETA], with theta being the +%% angle of rotation of the parabola (in degrees and Counter-Clockwise). +%% +%% drawParabola(PARABOLA, T); +%% Specifies which range of 't' are used for drawing parabola. If T is an +%% array with only two values, the first and the last values are used as +%% interval bounds, and several values are distributed within this +%% interval. +%% +%% drawParabola(..., NAME, VALUE); +%% Can specify one or several graphical options using parameter name-value +%% pairs. +%% +%% H = drawParabola(...); +%% Returns an handle to the created graphical object. +%% +%% +%% Example: +%% @example +%% figure(1); clf; hold on; +%% drawParabola([50 50 .2 30]); +%% drawParabola([50 50 .2 30], [-1 1], 'color', 'r', 'linewidth', 2); +%% axis equal; +%% @end example +%% +%% @seealso{drawCircle, drawEllipse} +%% @end deftypefn + +function varargout = drawParabola(varargin) + + % Extract parabola + if nargin<1 + error('geom2d:IllegalArgument', ... + 'Please specify parabola representation'); + end + + % input parabola is given as a packed array + parabola = varargin{1}; + varargin(1) = []; + x0 = parabola(:,1); + y0 = parabola(:,2); + a = parabola(:,3); + + if size(parabola, 2)>3 + theta = parabola(:, 4); + else + theta = zeros(length(a), 1); + end + + % extract parametrisation bounds + bounds = [-100 100]; + if ~isempty(varargin) + var = varargin{1}; + if isnumeric(var) + bounds = var; + varargin(1) = []; + end + end + + % create parametrisation + if length(bounds)>2 + t = bounds; + else + t = linspace(bounds(1), bounds(end), 100); + end + + % create handle array (in the case of several parabola) + h = zeros(size(x0)); + + % draw each parabola + for i=1:length(x0) + % compute transformation + trans = ... + createTranslation(x0(i), y0(i)) * ... + createRotation(deg2rad(theta(i))) * ... + createScaling(1, a); + + % compute points on the parabola + [xt yt] = transformPoint(t(:), t(:).^2, trans); + + % draw it + h(i) = plot(xt, yt, varargin{:}); + end + + % process output arguments + if nargout>0 + varargout{1}=h; + end + +endfunction +