Home > matGeom > geom2d > isParallel.m

isParallel

PURPOSE ^

ISPARALLEL Check parallelism of two vectors.

SYNOPSIS ^

function b = isParallel(v1, v2, varargin)

DESCRIPTION ^

ISPARALLEL Check parallelism of two vectors.

   B = isParallel(V1, V2)
   where V1 and V2 are two row vectors of length ND, ND being the
   dimension, returns 1 if the vectors are parallel, and 0 otherwise.

   Also works when V1 and V2 are two N-by-ND arrays with same number of
   rows. In this case, return a N-by-1 array containing 1 at the positions
   of parallel vectors.

   Also works when one of V1 or V2 is N-by-1 and the other one is N-by-ND
   array, in this case return N-by-1 results.

   B = isParallel(V1, V2, ACCURACY)
   specifies the accuracy for numerical computation. Default value is
   1e-14. 
   

   Example
   isParallel([1 2], [2 4])
   ans =
       1
   isParallel([1 2], [1 3])
   ans =
       0

   See also
   vectors2d, isPerpendicular, lines2d

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function b = isParallel(v1, v2, varargin)
0002 %ISPARALLEL Check parallelism of two vectors.
0003 %
0004 %   B = isParallel(V1, V2)
0005 %   where V1 and V2 are two row vectors of length ND, ND being the
0006 %   dimension, returns 1 if the vectors are parallel, and 0 otherwise.
0007 %
0008 %   Also works when V1 and V2 are two N-by-ND arrays with same number of
0009 %   rows. In this case, return a N-by-1 array containing 1 at the positions
0010 %   of parallel vectors.
0011 %
0012 %   Also works when one of V1 or V2 is N-by-1 and the other one is N-by-ND
0013 %   array, in this case return N-by-1 results.
0014 %
0015 %   B = isParallel(V1, V2, ACCURACY)
0016 %   specifies the accuracy for numerical computation. Default value is
0017 %   1e-14.
0018 %
0019 %
0020 %   Example
0021 %   isParallel([1 2], [2 4])
0022 %   ans =
0023 %       1
0024 %   isParallel([1 2], [1 3])
0025 %   ans =
0026 %       0
0027 %
0028 %   See also
0029 %   vectors2d, isPerpendicular, lines2d
0030 %
0031 
0032 % ------
0033 % Author: David Legland
0034 % e-mail: david.legland@inra.fr
0035 % Created: 2006-04-25
0036 % Copyright 2006 INRA - CEPIA Nantes - MIAJ (Jouy-en-Josas).
0037 
0038 %   HISTORY
0039 %   2007-09-18 copy from isParallel3d, adapt to any dimension, and add psb
0040 %       to specify precision
0041 %   2007-01-16 fix bug
0042 %   2009-09-21 fix bug for array of 3 vectors
0043 %   2011-01-20 replace repmat by ones-indexing (faster)
0044 %   2011-06-16 use direct computation (faster)
0045 %   2017-08-31 use normalized vectors
0046 
0047 % default accuracy
0048 acc = 1e-14;
0049 if ~isempty(varargin)
0050     acc = abs(varargin{1});
0051 end
0052 
0053 % normalize vectors
0054 v1 = normalizeVector(v1);
0055 v2 = normalizeVector(v2);
0056 
0057 % adapt size of inputs if needed
0058 n1 = size(v1, 1);
0059 n2 = size(v2, 1);
0060 if n1 ~= n2
0061     if n1 == 1
0062         v1 = v1(ones(n2,1), :);
0063     elseif n2 == 1
0064         v2 = v2(ones(n1,1), :);
0065     end
0066 end
0067 
0068 % performs computation
0069 if size(v1, 2) == 2
0070     % computation for plane vectors
0071     b = abs(v1(:, 1) .* v2(:, 2) - v1(:, 2) .* v2(:, 1)) < acc;
0072 else
0073     % computation in greater dimensions
0074     b = vectorNorm(cross(v1, v2, 2)) < acc;
0075 end
0076

Generated on Wed 16-Feb-2022 15:10:47 by m2html © 2003-2019