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

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

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

// // 1410
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
using namespace std; struct Node{
double x,y;
}; int Orientation(Node& a, Node& b, Node& c){
double val = (a.y- b.y)*(b.x-c.x) - (a.x-b.x)*(b.y-c.y);
if(fabs(val -0) < 1e-8){
return 0;
}else if(val > 0){
return 1;
}else{
return -1;
}
} bool onScope(Node& a, Node& b, Node& c){
if(c.x <=max(a.x, b.x) && c.x >=min(a.x, b.x) \
&& c.y <=max(a.y, b.y) && c.y >= min(a.y, b.y)){
return true;
}else{
return false;
}
} bool LineIntersect(Node& a, Node& b, Node& c, Node& d){
int val1 = Orientation(a, b, c);
int val2 = Orientation(a, b, d);
int val3 = Orientation(c, d, a);
int val4 = Orientation(c, d, b);
if( val1 != val2 && val3 != val4){
return true;
}
if(val1 == 0 && onScope(a, b, c)){ return true; }
if(val2 == 0 && onScope(a, b, d)){ return true; }
if(val3 == 0 && onScope(c, d, a)){ return true; }
if(val4 == 0 && onScope(c, d, b)){ return true; }
return false;
} int main(){
freopen("in.txt", "r", stdin); int test_num;
Node start, end, lt, rb;
bool flag;
scanf("%d", &test_num);
while(test_num--){
scanf("%lf %lf %lf %lf", &start.x, &start.y, &end.x, &end.y);
scanf("%lf %lf %lf %lf", &lt.x, &lt.y, &rb.x, &rb.y);
Node rt, lb;
rt.x = rb.x; rt.y = lt.y;
lb.x = lt.x; lb.y = rb.y;
if(LineIntersect(start, end, lt, rt) || LineIntersect(start, end, rt, rb) \
|| LineIntersect(start, end, rb, lb) || LineIntersect(start, end, lb, lt)){
printf("T\n");
}else{
if(min(start.x, end.x)>min(lt.x, rb.x) && max(start.x, end.x)<max(lt.x, rb.x) \
&& min(start.y, end.y)>min(lt.y, rb.y) && max(start.y, end.y)<max(lt.y, rb.y)){
printf("T\n");
}else{
printf("F\n");
}
}
}
return 0;
}

  

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. [原]在win上编译 subversion 源码实践Tonyfield的专栏

    (百度和网页的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。) [原]在win上编译 subversion 源码实践 2013-6-9阅读400 评论0 (参考 ...

  2. 三:shell运算符

    1:declare命令 shell默认是字符串型        如果需要加减乘除,需要定义为整型declare命令:改变默认变量的类型decalre [+/-] [选项]  变量名      -给变量 ...

  3. AStar算法的学习

    摘自:http://www.cnblogs.com/hxsyl/p/3994730.html A*算法的java实现 import java.util.ArrayList; import java.u ...

  4. [译] OpenStack Liberty 版本中的53个新变化

    一个新的秋季,一个新的OpenStack 版本.OpenStack 的第12个版本,Liberty,在10月15日如期交付,而且目前发行版本已经备好了.那么我们期望能从过去六个月时间的开发中获得些什么 ...

  5. [转]C#面试题

    本文转自http://www.cnblogs.com/lhws/archive/2010/09/21/1827115.html 1.维护数据库的完整性.一致性.你喜欢用触发器还是自写业务逻辑?为什么? ...

  6. [转]ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication)

    本文转自:http://www.cnblogs.com/parry/p/ASPNET_MVC_Web_API_digest_authentication.html 在前一篇文章中,主要讨论了使用HTT ...

  7. 【Python数据分析】简单爬虫 爬取知乎神回复

    看知乎的时候发现了一个 “如何正确地吐槽” 收藏夹,里面的一些神回复实在很搞笑,但是一页一页地看又有点麻烦,而且每次都要打开网页,于是想如果全部爬下来到一个文件里面,是不是看起来很爽,并且随时可以看到 ...

  8. 洛谷P2331 [SCOI2005] 最大子矩阵[序列DP]

    题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 输入格式: 第一行为n,m,k(1≤n≤100,1≤m≤2 ...

  9. matrix(No.1)operations

  10. gzip: stdout: No space left on device问题的解决

    一.问题描述 最近安装了ubuntu14.04,并在ubuntu14.04中编译了一次内核.这之后大部分情况下用sudo apt-get install 安装应用都会出现“gzip: stdout: ...