Geometry/Points and Lines/191.cpp
// The main function that returns true if line segment 'p1q1'
// and 'p2q2' intersect.
The main function that returns true if line segment 'p1q1'
and 'p2q2' intersect.
The main function that returns true if line segment ' p1q1 ' and ' p2q2 ' intersect .
bool doIntersect(point p1, point q1, point p2, point q2)
{
    int o1 = orientation(p1, q1, p2);
    int o2 = orientation(p1, q1, q2);
    int o3 = orientation(p2, q2, p1);
    int o4 = orientation(p2, q2, q1);
    if (o1 != o2 && o3 != o4)
        return true;
    if (o1 == 0 && onSegment(p1, p2, q1)) return true;
    if (o2 == 0 && onSegment(p1, q2, q1)) return true;
    if (o3 == 0 && onSegment(p2, p1, q2)) return true;
    if (o4 == 0 && onSegment(p2, q1, q2)) return true;
    return false; 
}
bool doIntersect ( point p1 , point q1 , point p2 , point q2 ) { int o1 = orientation ( p1 , q1 , p2 ) ; int o2 = orientation ( p1 , q1 , q2 ) ; int o3 = orientation ( p2 , q2 , p1 ) ; int o4 = orientation ( p2 , q2 , q1 ) ; if ( o1 != o2 && o3 != o4 ) return true ; if ( o1 == 0 && onSegment ( p1 , p2 , q1 ) ) return true ; if ( o2 == 0 && onSegment ( p1 , q2 , q1 ) ) return true ; if ( o3 == 0 && onSegment ( p2 , p1 , q2 ) ) return true ; if ( o4 == 0 && onSegment ( p2 , q1 , q2 ) ) return true ; return false ; }
The main function that returns true if line segment 'p1q1'
and 'p2q2' intersect.
The main function that returns true if line segment ' p1q1 ' and ' p2q2 ' intersect .
// Find the four orientations needed for general and // special cases // General case // Special Cases // p1, q1 and p2 are colinear and p2 lies on segment p1q1 // p1, q1 and p2 are colinear and q2 lies on segment p1q1 // p2, q2 and p1 are colinear and p1 lies on segment p2q2 // p2, q2 and q1 are colinear and q1 lies on segment p2q2 // Doesn't fall in any of the above cases