判断线段相交模板:
( 快速排斥+跨立 )
#define maxn 1000001
#define man 1e-12
//点
struct point{
double x
double y
}
//线段
struct line{
point a
point b
}lline[maxn]
//判断线段是否相交
bool judge(line l1,line l2)
{
point p1=l1.a
point p2=l1.b
point p3=l2.a
point p4=l2.b
if(min(p1.x,p2.x)>max(p3.x,p4.x) ||
min(p1.y,p2.y)>max(p3.y,p4.y) ||
min(p3.x,p4.x)>max(p1.x,p2.x) ||
min(p3.y,p4.y)>max(p1.y,p2.y))
{
return 0
}
double k1,k2,k3,k4
k1=(p2.x-p1.x)*(p3.y-p1.y)-(p2.y-p1.y)*(p3.x-p1.x)
k2=(p2.x-p1.x)*(p4.y-p1.y)-(p2.y-p1.y)*(p4.x-p1.x)
k3=(p4.x-p3.x)*(p1.y-p3.y)-(p4.y-p3.y)*(p1.x-p3.x)
k4=(p4.x-p3.x)*(p2.y-p3.y)-(p4.y-p3.y)*(p2.x-p3.x)
return (k1*k2<=man && k3*k4<=man)
}
int main()
{
int i=0
i++
cin>>lline[i].a.x>>lline[i].a.y
cin>>lline[i].b.x>>lline[i].b.y
for(int j=1
{
if(judge(lline[i],lline[j]))
{
cout<<"线段相交"<<endl
}
}
return 0
}