#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define eps 1e-8
#define zero(x) (((x)>0?(x):-(x))<eps)
struct point{double x,y;};
struct line{point a,b;};
double xmult(point p1,point p2,point p0){
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
int dot_online_in(point p,line l){
return zero(xmult(p,l.a,l.b))&&(l.a.x-p.x)*(l.b.x-p.x)<eps&&(l.a.y-p.y)*(l.b.y-p.y)<eps;
}
int same_side(point p1,point p2,line l){
return xmult(l.a,p1,l.b)*xmult(l.a,p2,l.b)>eps;
}
int dots_inline(point p1,point p2,point p3){
return zero(xmult(p1,p2,p3));
}
int intersect_in(line u,line v){
if (!dots_inline(u.a,u.b,v.a)||!dots_inline(u.a,u.b,v.b))
return !same_side(u.a,u.b,v)&&!same_side(v.a,v.b,u);
return dot_online_in(u.a,v)||dot_online_in(u.b,v)||dot_online_in(v.a,u)||dot_online_in(v.b,u);
}
int main(){
int n;
scanf("%d",&n);
double xstart,ystart,xend,yend,xleft,ytop,xright,ybottom;
while(n--){
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&xstart,&ystart,&xend,¥d,&xleft,&ytop,&xright,&ybottom);
//并不一定能够保证xleft<xright&&ytop>ybottom
if(xleft>xright){double tmp=xleft;xleft=xright;xright=tmp;}
if(ytop<ybottom){double tmp=ytop;ytop=ybottom;ybottom=tmp;}
if(xstart>=xleft&&xstart<=xright&&ystart>=ybottom&&ystart<=ytop&&xend>=xleft&&xend<=xright&¥d>=ybottom&¥d<=ytop)
printf("T\n");
else{
point p1,p2,p3,p4,p5,p6;
p1.x=xleft,p1.y=ytop;
p2.x=xright,p2.y=ytop;
p3.x=xright,p3.y=ybottom;
p4.x=xleft,p4.y=ybottom;
p5.x=xstart,p5.y=ystart;
p6.x=xend,p6.y=yend;
line l1,l2,l3,l4,l5;
l1.a=p1,l1.b=p2;
l2.a=p2,l2.b=p3;
l3.a=p3,l3.b=p4;
l4.a=p4,l4.b=p1;
l5.a=p5,l5.b=p6;
if(intersect_in(l1,l5)||intersect_in(l2,l5)||intersect_in(l3,l5)||intersect_in(l4,l5))
printf("T\n");
else
printf("F\n");
}
}
//system("pause");
return 0;
}
POJ 1410 几何 浙大模板
最新推荐文章于 2022-09-01 17:52:47 发布