% [E, lambda, gamma, isConvex] = lineIntersection(A,B,C,D)
% Given a line segment AB and another line segment CD, compute the point E
% where the lines intersect.
% A = [2,n] = [Ax;Ay] = point in 2D space
% B = [2,n] = [Bx;By] = point in 2D space
% C = [2,n] = [Cx;Cy] = point in 2D space
% D = [2,n] = [Dx;Dy] = point in 2D space
% E = [2, n] = intersection of lines AB and CD
% lambda = [1,n]
% E = lambda*A + (1-lambda)*B
% gamma = [1,n]
% E = gamma*C + (1-gamma)*D
% isConvex = is intersection on both lines?
% isConvex = (0 <= lambda <= 1) && (0 <= gamma <= 1)
% E1 = lambda*A + (1-lambda)*B
% E2 = gamma*C + (1-gamma)*D
% E1 == E2 --> linear system in [lambda; gamma] --> solve
% F = B-D;
% M = [(B-A), (C-D)]
% Z = M\F;
% lambda = Z(1);
% gamma = Z(2);
Matthew Kelly (2020). LineIntersection (https://www.mathworks.com/matlabcentral/fileexchange/56835-lineintersection), MATLAB Central File Exchange. Retrieved .