X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=octave_packages%2Fgeometry-1.5.0%2Fgeom2d%2FdrawCircleArc.m;fp=octave_packages%2Fgeometry-1.5.0%2Fgeom2d%2FdrawCircleArc.m;h=c2ab3709a15ce8e2f3f304f82ef7e6eeb9cb769c;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hp=0000000000000000000000000000000000000000;hpb=1705066eceaaea976f010f669ce8e972f3734b05;p=CreaPhase.git diff --git a/octave_packages/geometry-1.5.0/geom2d/drawCircleArc.m b/octave_packages/geometry-1.5.0/geom2d/drawCircleArc.m new file mode 100644 index 0000000..c2ab370 --- /dev/null +++ b/octave_packages/geometry-1.5.0/geom2d/drawCircleArc.m @@ -0,0 +1,123 @@ +%% Copyright (c) 2011, INRA +%% 2003-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} = } drawCircleArc (@var{xc}, @var{yc}, @var{r}, @var{start}, @var{end}) +%% @deftypefnx {Function File} {@var{h} = } drawCircleArc (@var{arc}) +%% @deftypefnx {Function File} {@var{h} = } drawCircleArc (@dots{}, @var{param}, @var{value}) +%% Draw a circle arc on the current axis +%% +%% drawCircleArc(XC, YC, R, START, EXTENT); +%% Draws circle with center (XC, YC), with radius R, starting from angle +%% START, and with angular extent given by EXTENT. START and EXTENT angles +%% are given in degrees. +%% +%% drawCircleArc(ARC); +%% Puts all parameters into one single array. +%% +%% drawCircleArc(..., PARAM, VALUE); +%% specifies plot properties by using one or several parameter name-value +%% pairs. +%% +%% H = drawCircleArc(...); +%% Returns a handle to the created line object. +%% +%% @example +%% % Draw a red thick circle arc +%% arc = [10 20 30 -120 240]; +%% figure; +%% axis([-50 100 -50 100]); +%% hold on +%% drawCircleArc(arc, 'LineWidth', 3, 'Color', 'r') +%% @end example +%% +%% @seealso{circles2d, drawCircle, drawEllipse} +%% @end deftypefn + +function varargout = drawCircleArc(varargin) + + if nargin == 0 + error('Need to specify circle arc'); + end + + circle = varargin{1}; + if size(circle, 2) == 5 + x0 = circle(:,1); + y0 = circle(:,2); + r = circle(:,3); + start = circle(:,4); + extent = circle(:,5); + varargin(1) = []; + + elseif length(varargin) >= 5 + x0 = varargin{1}; + y0 = varargin{2}; + r = varargin{3}; + start = varargin{4}; + extent = varargin{5}; + varargin(1:5) = []; + + else + error('drawCircleArc: please specify center, radius and angles of circle arc'); + end + + % convert angles in radians + t0 = deg2rad(start); + t1 = t0 + deg2rad(extent); + + % number of line segments + N = 60; + + % initialize handles vector + h = zeros(length(x0), 1); + + % draw each circle arc individually + for i = 1:length(x0) + % compute basis + t = linspace(t0(i), t1(i), N+1)'; + + % compute vertices coordinates + xt = x0(i) + r(i)*cos(t); + yt = y0(i) + r(i)*sin(t); + + % draw the circle arc + h(i) = plot(xt, yt, varargin{:}); + end + + if nargout > 0 + varargout = {h}; + end + + +endfunction +