题目链接:http://poj.org/problem?id=1410
题解:以前一直都是用叉积来求解的 这次看到一个代数几何的解法 果断学习了 O(∩_∩)O
此题巨坑:①线段在矩形内也是与矩形相交
②不一定是左上和右下 需要判断 坑爹~~~~(>_<)~~~~
#include<iostream>
#include<algorithm>
using namespace std;
int main ()
{
int T;
scanf("%d", &T);
while(T--)
{
int x1,y1,x2,y2,x_1,y_1,x_2,y_2;
scanf("%d %d %d %d %d %d %d %d", &x1, &y1, &x2, &y2, &x_1, &y_1, &x_2, &y_2);
int a = y2-y1, b = x1-x2, c = y1*x2-y2*x1;
if( (a*x_1+b*y_1+c >=0 && a*x_2+b*y_1+c <=0)
|| (a*x_2+b*y_1+c >=0 && a*x_2+b*y_2+c <=0)
|| (a*x_2+b*y_2+c >=0 && a*x_1+b*y_2+c <=0)
|| (a*x_1+b*y_2+c >=0 && a*x_1+b*y_1+c <=0))
{
if(x_1 > x_2) swap(x_1,x_2);
if(y_1 < y_2) swap(y_1,y_2);
if( (x1<x_1 && x2<x_1)
||(x1>x_2 && x2>x_2)
||(y1<y_2 && y2<y_2)
||(y1>y_1 && y2>y_1))
puts("F");
else
puts("T");
}
else
puts("F");
}
return 0;
}