%  equalAngleConstraint - Affine transform constraints given two equal angles.
%
%  Function calculates centre and radius of the constraint
%  circle in alpha-beta space generated by having two equal
%  (but unknown) angles between two pairs of lines in 
%  an affine image
%
%  Usage:  [c, r] = equalAngleConstraint(la1, lb1, la2, lb2)
%
%  Where:  la1 and lb1 are two lines defined using homogeneous coords that
%                          are separated by an angle that is known to
%                          be the same as the angle between  
%          la2 and lb2 - the other two lines.
%          c is the 2D coordinate of the centre of the constraint circle.
%          r is the radius of the centre of the constraint circle.

%  Peter Kovesi
%  School of Computer Science & Software Engineering
%  The University of Western Australia
%  pk @ csse uwa edu au
%  http://www.csse.uwa.edu.au/~pk
%
%  April 2000
%
%  Equations from Liebowitz and Zisserman 

function [c, r] = equalAngleConstraint(la1, lb1, la2, lb2)

a1 = -1a1(2)/la1(1);   % direction of line la1
b1 = -1b1(2)/lb1(1);   % direction of line lb1

a2 = -1a2(2)/la2(1);   % direction of line la2
b2 = -1b2(2)/lb2(1);   % direction of line lb2

c = [(a1*b2 - b1*a2)/(a1 - b1 - a2 + b2), 0];

r  = ((a1*b2 - b1*a2)/(a1 - b1 - a2 + b2))^2 ...
   + ((a1 - b1)*(a1*b1 - a2*b2))/(a1 - b1 - a2 + b2) ...
   - a1*b1;
