判断两条线段是否相交


double determinant(double v1, double v2, double v3, double v4)  // 行列式  
{  
    return (v1*v3-v2*v4);  
}  
  
bool intersect3(Point aa, Point bb, Point cc, Point dd)  
{  
    double delta = determinant(bb.x-aa.x,dd.x-cc.x, dd.y-cc.y, bb.y-aa.y);  
    if ( delta<=(1e-6) && delta>=-(1e-6) )  // delta=0,表示两线段重合或平行  
    {  
        return false;  
    }  
    double namenda = determinant(dd.x-cc.x, aa.x-cc.x, aa.y-cc.y, dd.y-cc.y) / delta;  
    if ( namenda>1 || namenda<0 )  
    {  
        return false;  
    }  
    double miu = determinant(bb.x-aa.x, aa.x-cc.x, aa.y-cc.y, bb.y-aa.y) / delta;  
    if ( miu>1 || miu<0 )  
    {  
        return false;  
    }  
    return true;  
}

两条线段求交 
     设有两线段AB和CD,其端点坐标分别为和,它们所在直线的参数方程分别为:
         
     若两线段相交,则交点的参数值,应满足: 
         
     即
         
     因此,若行列式 
         
     表示两线段AB和CD重合或平行。一般做为它们不相交来处理。如果,则可求出交点对应的两个参数值: 
          
     需要注意,只有时两线段才真正相交。否则,交点在两线段或其中某一条线段的延长线上,这时仍然认为是两线段不相交。 

 


原文:https://blog.csdn.net/qq_19707521/article/details/80609448 
 

你可能感兴趣的:(判断两条线段是否相交)