题意:给一个线段的两个端点坐标(确定线段),再给一个矩形的左上角的坐标和右下角的坐标(确定矩形),问判断该线段是否和矩形相交,在矩形内也算和矩形相交。直接用线段和矩形的四条边判断是否相交即可。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int maxx=1e5+10;
const double esp=1e-8;
struct node{double x,y;
};
struct point{node p1;node p2;
};
point t[maxx];
double muilt(node a,node b,node c){//叉乘 double x1=a.x-c.x;double x2=b.x-c.x;double y1=a.y-c.y;double y2=b.y-c.y;return (double)(x1*y2-x2*y1);
}
int Intersect2(point a,point b){// 排斥实验判断线段相交 return ((max(a.p1.x,a.p2.x)>=min(b.p1.x,b.p2.x))&&(max(b.p1.x,b.p2.x)>=min(a.p1.x,a.p2.x))&&(max(a.p1.y,a.p2.y)>=min(b.p1.x,b.p2.y))&&(max(b.p1.y,b.p2.y)>=min(a.p1.y,a.p2.y)));
}
int Intersect3(point a,point b){//跨立实验判断线段相交 double x1=muilt(b.p1,a.p2,a.p1);double x2=muilt(b.p2,a.p2,a.p1);double y1=muilt(a.p1,b.p2,b.p1);double y2=muilt(a.p2,b.p2,b.p1);if((x1*x2<=esp)&&(y1*y2<=esp&&Intersect2(a,b))){//线段相交判断return 1;}else{return 0;}
}
double Dist(node a,node b){//计算距离double x=a.x-b.x;double y=a.y-b.y;return (double)sqrt(x*x+y*y);
}
int Judge(point a,point b){//相交则返回1,否则返回0if(Intersect3(a,b)){return 1;}else{return 0;}
}
void swap(int&a,int&b){//交换函数int temp=a;a=b;b=temp;
}
int main(){int ts;cin>>ts;while(ts--){for(int i=1;i<=2;i++){cin>>t[i].p1.x>>t[i].p1.y;cin>>t[i].p2.x>>t[i].p2.y;}int a=t[1].p1.x,b=t[1].p1.y;int c=t[1].p2.x,d=t[1].p2.y;int e=t[2].p1.x,f=t[2].p1.y;int g=t[2].p2.x,h=t[2].p2.y;if(e>g){//保证左上角的在右下角的坐标之上swap(e,g);swap(t[2].p1.x,t[2].p2.x);}if(f<h){swap(f,h);swap(t[2].p1.y,t[2].p2.y);}t[4].p1.x=t[2].p1.x;t[4].p1.y=t[2].p1.y;t[4].p2.x=t[2].p2.x;t[4].p2.y=t[2].p1.y;t[5].p1.x=t[2].p2.x;t[5].p1.y=t[2].p1.y;t[5].p2.x=t[2].p2.x;t[5].p2.y=t[2].p2.y;t[6].p1.x=t[2].p2.x;t[6].p1.y=t[2].p2.y;t[6].p2.x=t[2].p1.x;t[6].p2.y=t[2].p2.y;t[7].p1.x=t[2].p1.x;t[7].p1.y=t[2].p2.y;t[7].p2.x=t[2].p1.x;t[7].p2.y=t[2].p1.y;int flag=0;for(int i=4;i<=7;i++){if(Judge(t[1],t[i])){flag=1;break;}}if(min(a,c)>=e&&max(a,c)<=g&&min(b,d)>=h&&max(b,d)<=f){//判断是否在矩形内(矩形内也算相交)flag=1;}if(flag==0){cout<<"F"<<endl;}else{cout<<"T"<<endl;}}return 0;
}

poj1410(线段相交问题判断)相关推荐

  1. POJ1410线段相交、快速排斥实验、跨立实验

    题目 Intersection 给出二维平面中一条线段和一个矩形,问线段和矩形是否有交点,矩形包括边和内部. 解题思路 先判断线段和四条边是否相交,如果没交点,再继续判断线段是否在矩形内. 判断线段相 ...

  2. 判断线段相交(hdu1558 Segment set 线段相交+并查集)

    先说一下题目大意:给定一些线段,这些线段顺序编号,这时候如果两条线段相交,则把他们加入到一个集合中,问给定一个线段序号,求在此集合中有多少条线段. 这个题的难度在于怎么判断线段相交,判断玩相交之后就是 ...

  3. 几何基础之判断线段相交问题

    1.判断两线段相交 只要判断q1,q2在线段s1s2的两侧和s1,s2在线段q1q2的两侧. q1s1q2s1>0就是在两侧. 2.矩形里有n条直线,一条直线的终点是另一条直线的起点.问矩形被分 ...

  4. [51nod1264]线段相交

    给定两个点: typedef  struct { double  x, y; } Point; Point A1,A2,B1,B2; 首先引入两个实验: a.快速排斥实验 设以线段A1A2和线段B1B ...

  5. Pipe HDU - 2150(判断线段相交+向量叉乘线代详解)

    题目: 经过激烈的争夺,Lele终于把那块地从Yueyue的手里抢了回来.接下来,Lele要开始建造他的灌溉系统. 通过咨询Lele的好友--化学系的TT,Lele决定在田里挖出N条沟渠,每条沟渠输送 ...

  6. 几何常用算法与判断线段相交【转】

    下面这个函数在我写的计算几何库函数里面有,那个库可以在http://algorithm.126.com/的资源中心   -   代码角   找到. 算法简单说明: 首先判断以两条线段为对角线的矩形是否 ...

  7. 德莱联盟[判断线段相交]

    德莱联盟 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...

  8. NYOJ1016(德莱联盟)(判断线段相交)

    德莱联盟 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...

  9. 如何判断2个线段相交

    判断 2 个线段相交有很多方法,最直接的方法就是直接计算两条直线的交点,然后看看交点是否分别在这两条线段上.这样的方法很容易理解,但是代码实现比较麻烦. 还有一种常用的方法是通过向量叉积来判断的,这种 ...

最新文章

  1. 分享做LOGO 的方法和思维方式 -liuleihai
  2. css文字背景虚化,通过实现背景模糊、文字颜色流光渐变、边框扩展等效果学习transition、transform、@keyframes等属性及伪元素的使用...
  3. java JDBC连接Oracle数据库的方法
  4. 【C++】34. gflags中的 --flagfile= 用法
  5. python sklearn.decomposition.PCA 主成分分析, 原理详解
  6. boost::search_n相关的测试程序
  7. 数据结构杂谈番外篇——时间复杂度计算
  8. Flutter Trying to embed a platform view but the PrerollContext does not support embedding
  9. 国产性能车天花板?145万买极星1,认真的么?
  10. flex接收java返回集合,前台的的flex对Java返回list类型的处理
  11. 解决了!联邦学习+推荐系统,冷启动和数据隐私问题双双K.O
  12. (二)洞悉linux下的Netfilteriptables:内核中的ip_tables小觑
  13. php 汉字拼音字典排序,按拼音排序的小技巧
  14. JS通过高德地图将经纬度转换为地理位置
  15. IndexError: index 0 is out of bounds for axis 0 with size 0
  16. kubectl 命令详解(三十三):rollout resume
  17. Java集合类ArrayList线程不安全验证和解决
  18. tyvj 火焰巨魔的惆怅
  19. phpstorm多出屏幕代码换行/自动换行
  20. 在北京西单图书大厦签名售书

热门文章

  1. MATLAB_图形学_形态学课程_有川字的车牌牌扣出‘川’字以及车牌号码
  2. 整个世界都是你的绿幕:这个视频抠图换背景的方法着实真假难辨
  3. 收藏 | CNN的一些可视化方法!
  4. 清华团队将Transformer用到3D点云分割
  5. 【OpenCV 4开发详解】Laplacian算子
  6. MapReduce骚气分析
  7. 调查:中国内地受访者每年花约40天用于各种“等”
  8. IAsyncResult接口
  9. caffe这个c++工程的目录结构
  10. angular-创建自定义的指令