判断两线段是否相交

bool judge(Point &a,Point &b,Point &c,Point &d){//判断两线段是否相交
    //快速排斥:
    //以两线段为对角线的矩形如果没有重叠部分,两线段则必不可能相交
    if(!(min(a.x,b.x)<=max(c.x,d.x)&&min(c.x,d.x)<=max(a.x,b.x)&&min(a.y,b.y)<=max(c.y,d.y)&&min(c.y,d.y)<=max(a.y,b.y)))
       return false;

    //跨立实验
    //如果两线段相交,那么ab一定在线段cd的两端,cd一定在ab两端
    if(!(cross(a,b,c)*cross(a,b,d)<=eps&&cross(c,d,a)*cross(c,d,b)<=eps))
        return false;
    return true;
}

 

posted @ 2020-08-11 10:13  xuanzo  阅读(119)  评论(0编辑  收藏  举报