http://poj.org/problem?id=1410

题目大意:给你一个线段和矩形的对角两点  如果相交就输出'T'  不想交就是'F'

注意:

1,给的矩形有可能不是左上 右下  所以要先判断的

2,线段在矩形的内部输出T

3,如果交点是矩形的顶点的话 是不相交的

情况有点多  刚开始考虑的太少   wa的我心疼

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<ctype.h>
  5. #include<math.h>
  6. #include<queue>
  7. #include<algorithm>
  8. #include<iostream>
  9.  
  10. using namespace std;
  11. #define N 20
  12. const double ESP = 1e-;
  13. #define INF 0x3f3f3f3f
  14. #define memset(a,b) memset(a,b,sizeof(a))
  15.  
  16. struct Point
  17. {
  18. double x,y;
  19. Point(double x=,double y=):x(x),y(y) {}
  20. Point operator - (const Point &temp)const
  21. {
  22. return Point(x-temp.x,y-temp.y);
  23. }
  24. int operator * (const Point &temp)const
  25. {
  26. double t=(x*temp.y)-(y*temp.x);
  27. if(t>ESP)
  28. return ;
  29. if(fabs(t)<ESP)
  30. return ;
  31. else
  32. return -;
  33. }
  34. } p[N],j;
  35.  
  36. Point line(Point u1,Point u2,Point v1,Point v2)///求交点模板
  37. {
  38. Point ret=u1;
  39. double t=((u1.x-v1.x)*(v1.y-v2.y)-(u1.y-v1.y)*(v1.x-v2.x))/((u1.x-u2.x)*(v1.y-v2.y)-(u1.y-u2.y)*(v1.x-v2.x));
  40.  
  41. ret.x+=(u2.x-u1.x)*t;
  42. ret.y+=(u2.y-u1.y)*t;
  43.  
  44. return ret;
  45. }
  46.  
  47. int main()
  48. {
  49. int n;
  50. scanf("%d",&n);
  51. while(n--)
  52. {
  53. j.x=j.y=INF;
  54. memset(p,);
  55. double x1,x2,y1,y2;
  56. double a,b,c,d;
  57. scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
  58. scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
  59. if(a>c)
  60. swap(a,c),swap(b,d);
  61. int u,D;
  62. u=max(b,d);
  63. D=min(b,d);
  64. if(x1>=a && x1<=c && x2>=a && x2<=c && y1>=D && y1<=u && y2>=D && y2<=u)
  65. {
  66. printf("T\n");
  67. continue;
  68. }
  69. ///判断线段与矩形的一条边是否相交
  70. p[]=Point(x1,y1);
  71. p[]=Point(x2,y2);
  72. p[]=Point(a,b);
  73. p[]=Point(c,b);
  74. p[]=Point(c,b);
  75. p[]=Point(c,d);
  76. p[]=Point(a,b);
  77. p[]=Point(a,d);
  78. p[]=Point(a,d);
  79. p[]=Point(c,d);
  80. int k,kk;
  81. int flag=;
  82. for(int i=; i<=; i++)
  83. {
  84. k=abs((p[]-p[i*-])*(p[i*]-p[i*-])+(p[]-p[i*-])*(p[i*]-p[i*-]));
  85. kk=abs((p[i*-]-p[])*(p[]-p[])+(p[i*]-p[])*(p[]-p[]));
  86. if(k!= && kk!=)///如果相交
  87. {
  88. if((p[]-p[i*-])*(p[i*]-p[i*-])== && (p[]-p[i*-])*(p[i*]-p[i*-])==)///共线
  89. {
  90. if(i== || i==)
  91. {
  92. if((p[].x>a && p[].x<c)||(p[].x>a && p[].x<c) || (p[].x<=a && p[].x>=c) || (p[].x<=a && p[].x>=c))
  93. {
  94. flag=;
  95. break;
  96. }
  97. }
  98. else
  99. {
  100. if((p[].y>D && p[].y<u)||(p[].y>D && p[].y<u) || (p[].y<=D && p[].y>=u) || (p[].y<=D && p[].y>=u))
  101. {
  102. flag=;
  103. break;
  104. }
  105. }
  106. }
  107. j=line(p[],p[],p[i*],p[i*-]);
  108. if(i==)
  109. if(j.x>a && j.x<c && j.y==b)///如果交点在a和c之间(不包括a c)
  110. {
  111. flag=;
  112. break;
  113. }
  114. if(i==)
  115. {
  116. if(j.x==c && j.y>D && j.y<u)
  117. {
  118. flag=;
  119. break;
  120. }
  121. }
  122. if(i==)
  123. {
  124. if(j.x==a && j.y>D && j.y<u)
  125. {
  126. flag=;
  127. break;
  128. }
  129. }
  130. if(i==)
  131. {
  132. if(j.x>a && j.x<c && j.y==d)
  133. {
  134. flag=;
  135. break;
  136. }
  137. }
  138. }
  139. }
  140. if(flag==)
  141. printf("F\n");
  142. else
  143. printf("T\n");
  144. }
  145. return ;
  146. }

Intersection--poj1410(判断线段与矩形的关系)的更多相关文章

  1. poj1410(判断线段和矩形是否相交)

    题目链接:https://vjudge.net/problem/POJ-1410 题意:判断线段和矩形是否相交. 思路:注意这里的相交包括线段在矩形内,因此先判断线段与矩形的边是否相交,再判断线段的两 ...

  2. poj 1410 Intersection (判断线段与矩形相交 判线段相交)

    题目链接 Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12040   Accepted: 312 ...

  3. POJ 1410 Intersection(判断线段交和点在矩形内)

    Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9996   Accepted: 2632 Desc ...

  4. POJ 1410--Intersection(判断线段和矩形相交)

    Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16322   Accepted: 4213 Des ...

  5. Intersection - POJ 1410(线段与矩形是否相交)

    题目大意:给一个线段和一个矩形,判断线段是否和矩形有公共点.   分析:用矩形的四个边当线段判断与所给的线段是否有交点,需要注意的是给的矩形是不标准的,需要自己转换,还需要注意线段有可能在矩形内部. ...

  6. POJ 1410 判断线段与矩形交点或在矩形内

    这个题目要注意的是:给出的矩形坐标不一定是按照左上,右下这个顺序的 #include <iostream> #include <cstdio> #include <cst ...

  7. [POJ 1410] Intersection(线段与矩形交)

    题目链接:http://poj.org/problem?id=1410 Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Sub ...

  8. POJ 1410 Intersection (线段和矩形相交)

    题目: Description You are to write a program that has to decide whether a given line segment intersect ...

  9. POJ 1410 Intersection --几何,线段相交

    题意: 给一条线段,和一个矩形,问线段是否与矩形相交或在矩形内. 解法: 判断是否在矩形内,如果不在,判断与四条边是否相交即可.这题让我发现自己的线段相交函数有错误的地方,原来我写的线段相交函数就是单 ...

随机推荐

  1. 原创 :单刷深渊 在Linux中系统安装mysql实战直播

    [root@web108 tools]# ###开始装mysql 1添加用户 [root@web108 tools]# useradd -s /sbin/nologin -M mysql 2解压 [r ...

  2. dirname, basename - 分析路径成员

    总览 (SYNOPSIS) #include <libgen.h> char *dirname(char *path); char *basename(char *path); 描述 (D ...

  3. 20针,14针,10针JTAG引脚对应关系

    J-Link是常用的调试工具,用于程序的调试和下载.常用的J-Link的的接口有很多种,常见的有20针,14针和10针. J-Link可以使用JTAG方式下载调试程序,也可以使用SWD方式.从引脚方面 ...

  4. SSM框架删除/更新时返回影响条数

    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">    < ...

  5. No-6.用户权限相关命令

    用户权限相关命令 目标 用户 和 权限 的基本概念 用户管理 终端命令 组管理 终端命令 修改权限 终端命令 01. 用户 和 权限 的基本概念 1.1 基本概念 用户 是 Linux 系统工作中重要 ...

  6. 时间函数datetime time

    time模块 time翻译过来就是时间,有我们其实在之前编程的时候有用到过. #常用方法 1.time.sleep(secs) (线程)推迟指定的时间运行.单位为秒. 2.time.time() 获取 ...

  7. luogu P1821 Silver Cow Party

    题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the b ...

  8. Linux CentOS 知识和常用命令

    1.常用热键 [Tab]它具有“命令补全”与“文件补全”的功能[Ctrl+C]中断执行中的程序组合键[Ctrl+d]键盘输入结束.也可以用来替代 exit 2.Linux 常用编辑器 vi 和 vim ...

  9. Django中对接第三方支付(支付宝)实现支付的流程

    1. 业务逻辑准备 1. 使用沙箱提供的商家环境 沙箱环境:是支付宝提供给开发者的模拟支付的环境 沙箱应用:https://docs.open.alipay.com/200/105311 沙箱账号:h ...

  10. 前端面试绝对会考的JS问题!【已经开源】

    写在前面 [前端指南]前端面试库已经开源,正在完善之中 [x] css问题 [x] html问题 [x] javascript问题 github地址 https://github.com/nanhup ...