Para encontrar o ponto (x,y) que as retas se tocam, montamos um sistema de equação, considerando que o x e o y de ambas as retas são iguais. Logo, precisamos agora encontrar quem é esse x e o y.
bool areIntersect(line l1, line l2, point &p)
{
// Retas paralelas não se interceptam
if (areParallel(l1,l2)) return false;
p.x = (-l1.c* l2.b + l1.b*l2.c) / (l2.b*l1.a - l1.b*l2.a);
/* Caso uma das linhas seja vertical, então b é 0. Nesse caso,
devemos usar a outra linha. Além disso, as duas não podem ser verticais,
pois se fossem, elas seriam paralelas e portanto, a função já
teria retornado
*/
if (fabs(l1.b) >EPS)
{
p.y = -(l1.a * p.x + l1.c) / l1.b;
}
else
{
p.y = -(l2.a * p.x + l2.c) / l2.b;
}
return true;
}