So I have tried two methods that should both work with line segments to determine if they are intersecting. The problem is on occasion I get a random false positive, or false negatives.
The commented code was my first attempt the rest of the code was my second attempt.
Found the logic at these sites:
homework - How do you detect where two line segments intersect? - Stack Overflow
Intersection point of two lines
Code:
bool C_Line::Lines_Intersect(C_Line l)
{
/*
C_Point r = p1 - p;
C_Point q = l.Get_Point1();
C_Point s = l.Get_Point2() - l.Get_Point1();
float RxS = r.Cross_Product(s);
if(RxS == 0)return false;
float QPxR = (q-p).Cross_Product(r);
if(QPxR == 0)return false;
float t = (q-p).Cross_Product(s)/RxS;
float u = QPxR/RxS;
if(t <= 1 && t >=0 && u <= 1 && u >= 0)return true;
else return false;
*/
C_Point A = p;
C_Point B = p1;
C_Point C = l.Get_Point1();
C_Point D = l.Get_Point2();
int x1 = A.Get_X();
int x2 = B.Get_X();
int x3 = C.Get_X();
int x4 = D.Get_X();
int y1 = A.Get_Y();
int y2 = B.Get_Y();
int y3 = C.Get_Y();
int y4 = D.Get_Y();
float denom = ((y4 - y3)*(x2 - x1)) - ((x4 - x3)*(y2 - y1));
if(denom == 0)return true;
float ua = ((x4 - x3)*(y1 - y3) - (y4 - y3)*(x1 - x3)) / denom;
float ub = ((x2 - x1)*(y1 - y3) - (y2 - y1)*(x1 - x3)) / denom;
if(ua <= 1 && ua >= 0 && ub <= 1 && ub >= 0)return true;
else return false;
}