规范相交模板
struct point
{
double x,y;
};
double det(double x1,double y1,double x2,double y2)
{
return x1*y2-x2*y1;
}
double cross(point a,point b,point c)
{
return det(a.x-c.x,a.y-c.y,b.x-c.x,b.y-c.y);
}
int segcrossSimple(point a,point a,point c,point d)
{
return (dblcmp(cross(a,c,d))^dblcmp(cross(b,c,d))==-2)
&&(dblcmp(cross(c,a,b))^dblcmp(cross(d,a,b))==-2);
}
^按位异或a^b==-2等价于ab<0或者ab==-1;