计算几何的题目, 学cv的要做一下。poj 地址: http://poj.org/problem?id=1410

题意:判断一个直线段,是否与一个矩形有相交点。

解决方案: 判断矩形的每一条边是否与直线段相交, 则归结为判断直线段相交问题,然后判断两条线段是否相交的条件,是看每一条线段的两个点,是否分布在另一条直线的两端。 利用斜率可以求解。

  1. // // 1410
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <cstdlib>
  5. #include <cstring>
  6. #include <string>
  7. #include <cmath>
  8. #include <vector>
  9. using namespace std;
  10.  
  11. struct Node{
  12. double x,y;
  13. };
  14.  
  15. int Orientation(Node& a, Node& b, Node& c){
  16. double val = (a.y- b.y)*(b.x-c.x) - (a.x-b.x)*(b.y-c.y);
  17. if(fabs(val -0) < 1e-8){
  18. return 0;
  19. }else if(val > 0){
  20. return 1;
  21. }else{
  22. return -1;
  23. }
  24. }
  25.  
  26. bool onScope(Node& a, Node& b, Node& c){
  27. if(c.x <=max(a.x, b.x) && c.x >=min(a.x, b.x) \
  28. && c.y <=max(a.y, b.y) && c.y >= min(a.y, b.y)){
  29. return true;
  30. }else{
  31. return false;
  32. }
  33. }
  34.  
  35. bool LineIntersect(Node& a, Node& b, Node& c, Node& d){
  36. int val1 = Orientation(a, b, c);
  37. int val2 = Orientation(a, b, d);
  38. int val3 = Orientation(c, d, a);
  39. int val4 = Orientation(c, d, b);
  40. if( val1 != val2 && val3 != val4){
  41. return true;
  42. }
  43. if(val1 == 0 && onScope(a, b, c)){ return true; }
  44. if(val2 == 0 && onScope(a, b, d)){ return true; }
  45. if(val3 == 0 && onScope(c, d, a)){ return true; }
  46. if(val4 == 0 && onScope(c, d, b)){ return true; }
  47. return false;
  48. }
  49.  
  50. int main(){
  51. freopen("in.txt", "r", stdin);
  52.  
  53. int test_num;
  54. Node start, end, lt, rb;
  55. bool flag;
  56. scanf("%d", &test_num);
  57. while(test_num--){
  58. scanf("%lf %lf %lf %lf", &start.x, &start.y, &end.x, &end.y);
  59. scanf("%lf %lf %lf %lf", &lt.x, &lt.y, &rb.x, &rb.y);
  60. Node rt, lb;
  61. rt.x = rb.x; rt.y = lt.y;
  62. lb.x = lt.x; lb.y = rb.y;
  63. if(LineIntersect(start, end, lt, rt) || LineIntersect(start, end, rt, rb) \
  64. || LineIntersect(start, end, rb, lb) || LineIntersect(start, end, lb, lt)){
  65. printf("T\n");
  66. }else{
  67. if(min(start.x, end.x)>min(lt.x, rb.x) && max(start.x, end.x)<max(lt.x, rb.x) \
  68. && min(start.y, end.y)>min(lt.y, rb.y) && max(start.y, end.y)<max(lt.y, rb.y)){
  69. printf("T\n");
  70. }else{
  71. printf("F\n");
  72. }
  73. }
  74. }
  75. return 0;
  76. }

  

reference:  http://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/

poj-1410 Intersection的更多相关文章

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

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

  2. POJ 1410 Intersection (计算几何)

    题目链接:POJ 1410 Description You are to write a program that has to decide whether a given line segment ...

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

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

  4. POJ 1410 Intersection(线段相交&amp;&amp;推断点在矩形内&amp;&amp;坑爹)

    Intersection 大意:给你一条线段,给你一个矩形,问是否相交. 相交:线段全然在矩形内部算相交:线段与矩形随意一条边不规范相交算相交. 思路:知道详细的相交规则之后题事实上是不难的,可是还有 ...

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

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

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

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

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

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

  8. 简单几何(线段相交) POJ 1410 Intersection

    题目传送门 题意:一个矩形和一条线段,问是否有相交 分析:考虑各种情况.坑点:给出的矩形的两个端点是无序的,还有线段完全在矩形内也算相交 /****************************** ...

  9. POJ 1410 Intersection(计算几何)

    题目大意:题目意思很简单,就是说有一个矩阵是实心的,给出一条线段,问线段和矩阵是否相交解题思路:用到了线段与线段是否交叉,然后再判断线段是否在矩阵里面,这里要注意的是,他给出的矩阵的坐标明显不是左上和 ...

  10. POJ 1410 Intersection 数据错误

    题目要求判断一条线段和一个矩形是否相交,或者是否在矩形里面(题目好像没说?) 思路就是直接暴力判断和矩形四条边是否相交,和线段的坐标是否在矩形的坐标范围即可. 然后题目的数据,(xleft,ytop) ...

随机推荐

  1. ln

    文件描述符是相对进程而言的,一个文件可以有多个文件描述符,但只有一个inode,inode一样就是同一个文件,文件名不同也是同一个 硬链接 两个文件是指向同一个存储区,inode号一样,并没有开辟新的 ...

  2. Android ImageView(scaleType属性)(转)

    (转自:http://www.open-open.com/lib/view/open1378257991687.html) <ImageView android:id="@+id/im ...

  3. 系统进程 zygote(二)—— zygote.rc 脚本

    夕阳已在沉沉的淡化,这黄昏的美,有谁能描画?莽莽的天涯,哪里是我的家,哪里是我的家?爱人呀,我这般的想着你,你那里可也有丝毫的牵挂?—— 徐志摩·海边的梦 ilocker:关注 Android 安全( ...

  4. [转]C#网络编程(基本概念和操作) - Part.1

    本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part1.aspx 引言 C#网络编程系列文章计划简单地讲述 ...

  5. IT菜鸟的第一天

    小弟愚钝,被别人影响,打算入IT行业试试水的深浅,俗话说技不压身,多会一种就多一条路子,抱着这种求知的心态我就开始的我在汉企的IT生涯! 第一天无非就是简介,对IT行业的介绍,反正听得我挺懵的,不过介 ...

  6. SQL存储过程的调用及写法

    调用函数: public class SqlProcess { ; public DataSet ReturnSet = null; public SqlDataAdapter adapter = n ...

  7. onSaveInstanceState() 和 onRestoreInstanceState()

    本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceState(),并且在介绍这两个方法之后,再分别来实现使用 ...

  8. MysqlHelper 需要重写

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Text;u ...

  9. C#几个经常用到的字符串截取

    C#几个经常用到的字符串截取 一. 1.取字符串的前i个字符 (1)string str1=str.Substring(0,i); (2)string str1=str.Remove(i,str.Le ...

  10. tomcat安装配置.md

    tomcat 安装 安装jdk jdk我使用的是oracle的,如果下载请在oracle的官网上下载.或者你也可以使用openjdk,官网在http://openjdk.java.net/. # ta ...