题目链接

题意

判断线段和矩形是否有交点(矩形的范围是四条边及内部)。

思路

判断线段和矩形的四条边有无交点 && 线段是否在矩形内。

注意第二个条件。

Code

#include <cstdio>
#include <cmath>
#include <iostream>
#include <cstring>
#define inf 0x3f3f3f3f
#define eps 1e-6
#define maxn 110
using namespace std;
typedef long long LL;
struct POINT {
double x;
double y;
POINT(double a=0, double b=0) { x=a; y=b;} //constructor
};
struct LINESEG {
POINT s;
POINT e;
LINESEG(POINT a, POINT b) { s=a; e=b;}
LINESEG() { }
}seg[maxn];
double multiply(POINT sp,POINT ep,POINT op) {
return((sp.x-op.x)*(ep.y-op.y)-(ep.x-op.x)*(sp.y-op.y));
}
bool intersect(LINESEG u,LINESEG v) {
return( (max(u.s.x,u.e.x)>=min(v.s.x,v.e.x))&& //排斥实验
(max(v.s.x,v.e.x)>=min(u.s.x,u.e.x))&&
(max(u.s.y,u.e.y)>=min(v.s.y,v.e.y))&&
(max(v.s.y,v.e.y)>=min(u.s.y,u.e.y))&&
(multiply(v.s,u.e,u.s)*multiply(u.e,v.e,u.s)>=0)&& //跨立实验
(multiply(u.s,v.e,v.s)*multiply(v.e,u.e,v.s)>=0));
}
bool inside(LINESEG l, int x1, int y1, int x2, int y2) {
return l.s.x >= x1 && l.s.x <= x2 && l.s.y <= y1 && l.s.y >= y2;
return l.e.x >= x1 && l.e.x <= x2 && l.e.y <= y1 && l.e.y >= y2;
}
void work() {
int x1,y1,x2,y2,x3,y3,x4,y4;
scanf("%d%d%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4);
if (x3 > x4) swap(x3, x4); if (y3 < y4) swap(y3, y4);
LINESEG l(POINT(x1, y1), POINT(x2, y2));
if (intersect(l, LINESEG(POINT(x3, y3), POINT(x3, y4))) || intersect(l, LINESEG(POINT(x3, y3), POINT(x4, y3)))
|| intersect(l, LINESEG(POINT(x4, y3), POINT(x4, y4))) || intersect(l, LINESEG(POINT(x3, y4), POINT(x4, y4)))
|| inside(l, x3, y3, x4, y4)) {
putchar('T');
}
else putchar('F');
printf("\n");
}
int main() {
int n;
scanf("%d", &n);
while (n--) work();
return 0;
}

最新文章

  1. Oracle 11g default profile 默认启用密码过期180天 ORA-28001错误处理
  2. 网页for循环get测试
  3. 【转】HTML转义字符大全
  4. 多个TableView的练习
  5. Android WIFI 操作
  6. AVR单片机RC触摸
  7. AndroidStudio运行项目出现Unsupported method: AndroidProject.getPluginGeneration()错误解决办法
  8. C++基础:二维数组动态的申请内存和释放内存
  9. Codeforces Round #539 (Div. 2) - D. Sasha and One More Name(思维)
  10. Day05(fianl、抽象类、接口)
  11. Oracle SQL性能优化的40条军规
  12. 2018-2019-2 20165313 Exp3 免杀原理与实践
  13. 破解StarUML3.01最新版 for Linux(Ubuntu16LTS)
  14. February 3rd, 2018 Week 5th Saturday
  15. class-dump在osx 10.11以后安装方法
  16. Android 源码阅读笔记
  17. mysqlbateis generator 当遇到tinyint 生成转化bool 解决方法
  18. day 08 课后作业
  19. 20155338 2016-2017-2《Java程序设计》第1周学习总结
  20. 【DB2】判断连续时间,如果间断则新增一条记录

热门文章

  1. cocos2dx lua 热更新方案的实现
  2. iOS 打印系统字体
  3. 深入理解 hashcode 和 hash 算法
  4. CentOS 7.4 基于LNMP搭建wordpress
  5. 03Qt信号与槽(2)
  6. java实现可安装的exe程序
  7. C语言指针分析
  8. SSAS——MDX基础
  9. UVa 11695 树的直径 Flight Planning
  10. C# 数组 之间转换