51nod 1264 线段相交
因题目相似,题解:
http://blog.csdn.net/qq_33199236/article/details/51224875
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define MOD 1007
#define N 10001
struct Point
{
double x,y;
};
//叉积
double mult(Point a, Point b, Point c)
{
return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);
}
//aa, bb为一条线段两端点 cc, dd为另一条线段的两端点 相交返回true, 不相交返回false
bool intersect(Point aa, Point bb, Point cc, Point dd)
{
if ( mult(cc, bb, aa)*mult(bb, dd, aa)<0 )
return false;
if ( mult(aa, dd, cc)*mult(dd, bb, cc)<0 )
return false;
return true;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
Point a,b,c,d;
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y,&d.x,&d.y);
int f = intersect(a,b,c,d);
if(f)
puts("Yes\n");
else
puts("No\n");
}
return 0;
}