bool Vector2::isLineOverlap(const Vector2& A, const Vector2& B, const Vector2& C, const Vector2& D)
 {
     if( (A.x == B.x && A.y == B.y) || (C.x == D.x && C.y == D.y))
         return false;
     
     if (crossProduct2Vector(A, B, C, D) == 0 && (crossProduct2Vector(C, D, C, A) == 0 || crossProduct2Vector(A, B, C, A) == 0))
         return true;
     
     return false;
 }
 // TODO: 'denom 이하' 부터 이해하기.
 bool Vector2::isLineIntersect(const Vector2& A, const Vector2& B, const Vector2& C, const Vector2& D, double *T1, double *T2)
 {
     if( (A.x == B.x && A.y == B.y) || (C.x == D.x && C.y == D.y))
         return false;
     
     const double denom = crossProduct2Vector(A, B, C, D);
     
     if (denom == 0)
     {
         return false;
     }
     if (T1 != nullptr) *T1 = crossProduct2Vector(C, D, C, A) / denom;
     if (T2 != nullptr) *T2 = crossProduct2Vector(A, B, C, A) / denom;
     
     return true;
 }
示例#3
0
bool Point::isLineOverlap(const Point& A, const Point& B,
                            const Point& C, const Point& D)
{
    // FAIL: Line undefined
    if ( (A.x==B.x && A.y==B.y) || (C.x==D.x && C.y==D.y) )
    {
        return false;
    }
    
    if (crossProduct2Vector(A, B, C, D) == 0 &&
        (crossProduct2Vector(C, D, C, A) == 0 || crossProduct2Vector(A, B, C, A) == 0))
    {
        return true;
    }
    
    return false;
}
 bool Vector2::isLineParallel(const Vector2& A, const Vector2& B, const Vector2& C, const Vector2& D)
 {
     if ( (A.x==B.x && A.y==B.y) || (C.x==D.x && C.y==D.y) )
     {
         return false;
     }
     
     if (crossProduct2Vector(A, B, C, D) == 0)
     {
         // line overlap
         if (crossProduct2Vector(C, D, C, A) == 0 || crossProduct2Vector(A, B, C, A) == 0)
         {
             return false;
         }
         
         return true;
     }
     
     return false;
 }
示例#5
0
bool Point::isLineIntersect(const Point& A, const Point& B,
                            const Point& C, const Point& D,
                            float *S, float *T)
{
    // FAIL: Line undefined
    if ( (A.x==B.x && A.y==B.y) || (C.x==D.x && C.y==D.y) )
    {
        return false;
    }
    
    const float denom = crossProduct2Vector(A, B, C, D);
    
    if (denom == 0)
    {
        // Lines parallel or overlap
        return false;
    }
    
    if (S != nullptr) *S = crossProduct2Vector(C, D, C, A) / denom;
    if (T != nullptr) *T = crossProduct2Vector(A, B, C, A) / denom;
    
    return true;
}