大致題意:就是判斷矩形有沒有和線段相交的水題,等等,爲什麼別人說還要判斷是不是在矩形內???但是我沒判斷啊???我怎麼就過了????可能是數據水吧,其實判斷線段在不在矩形內也很簡單,大不了就多一點點代碼量判斷一下。算了,不添了,就當是生活給的一點小樂趣吧。
最後,代碼:
#include<iostream>
using namespace std;
struct line
{
double x1,y1,x2,y2;
};
double multiple_cross(double x1,double y1,double x2,double y2)
{
return x1*y2-x2*y1;
}
bool check(line a,line b)
{
if(!(min(a.x1,a.x2)<=max(b.x1,b.x2)&&min(a.y1,a.y2)<=max(b.y1,b.y2)&&min(b.x1,b.x2)<=max(a.x1,a.x2)&&min(b.y1,b.y2)<=max(a.y1,a.y2)))
return false;
double u,v,w,z;
u=multiple_cross(a.x1-b.x1,a.y1-b.y1,b.x2-b.x1,b.y2-b.y1);
v=multiple_cross(a.x2-b.x1,a.y2-b.y1,b.x2-b.x1,b.y2-b.y1);
w=multiple_cross(b.x1-a.x1,b.y1-a.y1,a.x2-a.x1,a.y2-a.y1);
z=multiple_cross(b.x2-a.x1,b.y2-a.y1,a.x2-a.x1,a.y2-a.y1);
if(u*v<=0&&w*z<=0)
return true;
return false;
}
int main()
{
int n;
cin>>n;
while(n--)
{
line a,b,c;
cin>>a.x1>>a.y1>>a.x2>>a.y2;
cin>>b.x1>>b.y1>>b.x2>>b.y2;
bool flag=false;
c.x1=b.x1;
c.y1=b.y1;
c.x2=b.x1;
c.y2=b.y2;
if(check(a,c))
flag=true;
c.x2=b.x2;
c.y2=b.y1;
if(check(a,c))
flag=true;
c.x1=b.x2;
c.y1=b.y1;
if(check(a,c))
flag=true;
c.x1=b.x1;
c.y1=b.y2;
if(check(a,b))
flag=true;
if(flag)
cout<<"T"<<endl;
else
cout<<"F"<<endl;
}
return 0;
}