ANGLE2POINTS Compute horizontal angle between 2 points. ALPHA = angle2Points(P1, P2), Pi are either [1*2] arrays, or [N*2] arrays, in this case ALPHA is a [N*1] array. The angle computed is the horizontal angle of the line (P1 P2) Result is always given in radians, between 0 and 2*pi. See also points2d, angles2d, angle3points, normalizeAngle, vectorAngle
0001 function theta = angle2Points(varargin) 0002 %ANGLE2POINTS Compute horizontal angle between 2 points. 0003 % 0004 % ALPHA = angle2Points(P1, P2), 0005 % Pi are either [1*2] arrays, or [N*2] arrays, in this case ALPHA is a 0006 % [N*1] array. The angle computed is the horizontal angle of the line 0007 % (P1 P2) 0008 % Result is always given in radians, between 0 and 2*pi. 0009 % 0010 % See also 0011 % points2d, angles2d, angle3points, normalizeAngle, vectorAngle 0012 % 0013 0014 % ------ 0015 % Author: David Legland 0016 % E-mail: david.legland@inrae.fr 0017 % Created: 2007-03-02 0018 % Copyright 2007-2024 INRA - Cepia Software Platform 0019 0020 % process input arguments 0021 if length(varargin)==2 0022 p1 = varargin{1}; 0023 p2 = varargin{2}; 0024 elseif isscalar(varargin) 0025 var = varargin{1}; 0026 p1 = var(1,:); 0027 p2 = var(2,:); 0028 end 0029 0030 % ensure data have correct size 0031 n1 = size(p1, 1); 0032 n2 = size(p2, 1); 0033 if n1~=n2 && min(n1, n2)>1 0034 error('angle2Points: wrong size for inputs'); 0035 end 0036 0037 % angle of line (P2 P1), between 0 and 2*pi. 0038 dp = bsxfun(@minus, p2, p1); 0039 theta = mod(atan2(dp(:,2), dp(:,1)) + 2*pi, 2*pi); 0040