代码:
int ControlFloat(double x)//精度控制
{
if(fabs(x)<1e-11)
return 0;
return (x>0)?1:-1;
}
double ChaJi(point p0,point p1,point p2)//叉积
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
bool intersect(point a,point b,point c,point d)//判断直线ab与线段cd是否有交点,有则输出x坐标
{
double s1=ChaJi(a,b,c);
double s2=ChaJi(a,b,d);
int d1=ControlFloat(s1);
int d2=ControlFloat(s2);
if(d1*d2<0)
{
tempmax=(c.x*s2-d.x*s1)/(s2-s1);
return true;
}
if(d1*d2==0)
return true;
return false;
}