分别检查两条线段,如果双方都符合“另一条线段的两个端点分别位于当前线段的顺时针方向和逆时针方向”,则两条线段相交。
const int COUNTER_CLOCKWISE=1;
const int CLOCKWISE=-1;
const int ONLINE_BACK=2;
const int ONLINE_FRONT=-2;
const int ON_SEGMENT=0;
int ccw(point a,point b,point c)
{
point temp1=b-a;
point temp2=c-a;
if(cross(temp1,temp2)>eps){return COUNTER_CLOCKWISE;}
if(cross(temp1,temp2)<-eps){return CLOCKWISE;}
if(dot(temp1,temp2)<-eps){return ONLINE_BACK;}
if(temp1.norm()<temp2.norm()){return ONLINE_FRONT;}
return ON_SEGMENT;
}
int intersect(point a,point a1,point b,point b1)
{
if(ccw(a,a1,b)*ccw(a,a1,b1)<=0&&ccw(b,b1,a)*ccw(b,b1,a1)<=0){
return 1;
}else{
return 0;
}
}