#include<iostream>
using namespace std;
struct Lpoint {double x,y;}; //点
struct Llineseg{ Lpoint a,b;}; //线段
double xmulti(Lpoint p1,Lpoint p2,Lpoint p0)//叉乘
{
return ((p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y));
}
double mx(double t1,double t2)
{
if(t1>t2) return t1;
return t2;
}
double mn(double t1,double t2)
{
if(t1<t2) return t1;
return t2;
}
int lsinterls(Llineseg u,Llineseg v)//判断是否相交
{
return( (mx(u.a.x,u.b.x)>=mn(v.a.x,v.b.x))&&
(mx(v.a.x,v.b.x)>=mn(u.a.x,u.b.x))&&
(mx(u.a.y,u.b.y)>=mn(v.a.y,v.b.y))&&
(mx(v.a.y,v.b.y)>=mn(u.a.y,u.b.y))&&
(xmulti(v.a,u.b,u.a)*xmulti(u.b,v.b,u.a)>=0)&&
(xmulti(u.a,v.b,v.a)*xmulti(v.b,u.b,v.a)>=0));
}
int main()
{
int T;
//freopen("in.txt","r",stdin);
scanf("%d",&T);
while(T--)
{
Llineseg u,v;
int cnt=0;
cin>>u.a.x>>u.a.y>>u.b.x>>u.b.y>>v.a.x>>v.a.y>>v.b.x>>v.b.y;
if(lsinterls(u,v))
cnt++;
if(cnt)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
51NOD1264 线段相交(模板)
猜你喜欢
转载自blog.csdn.net/love20165104027/article/details/81434331
今日推荐
周排行