附上题的地址

https://vjudge.net/problem/HDU-1086#

// 点是否在矩形
// 矩形点是 st 和 ed
bool IsPointInRectangle(Point jpt, Point st, Point ed)
{if (min(st.x, ed.x) <= jpt.x &&max(st.x, ed.x) >= jpt.x &&min(st.y, ed.y) <= jpt.y &&max(st.y, ed.y) >= jpt.y)return true;return false;
}/*
两线段相交分为"规范相交"和"非规范相交"。
"规范相交"指的是两条线段恰有唯一一个不是端点的公共点;
而如果一条线段的一个端点在另一条线段上,或者两条线段部分重合,则视为“非规范相交”,
*/
bool IsSegmentIntersect(Point A, Point B, Point C, Point D) {// 快速排斥
/*    //  快速排斥 好理解版本  判断在不在矩形内.  if (IsPointInRectangle(C, A, B) && IsPointInRectangle(D, A, B)) return false;if (GetCross(A, C, B) * GetCross(A, D, B) <= 0.0 &&GetCross(C, A, D) * GetCross(C, B, D) <= 0.0)  return true;return false;*/// 前3句是快速排斥 // 后2句是跨立实验  <= 表示允许重叠 端点在另一线段上 < 则不允许 if (max(A.x, B.x) >= min(C.x, D.x) &&min(A.x, B.x) <= max(C.x, D.x) &&max(A.y, B.y) >= min(C.y, D.y) &&GetCross(A, C, B) * GetCross(A, D, B) <= 0.0 &&GetCross(C, A, D) * GetCross(C, B, D) <= 0.0 )return true;return false;
} 

线段封装

struct Segment {Point st;Point ed;void Read() {scanf("%lf%lf%lf%lf", &st.x, &st.y, &ed.x, &ed.y);}
}Sg[128];bool IsSegmentIntersect(Segment A, Segment B) {return IsSegmentIntersect(A.st, A.ed, B.st, B.ed);
}

转载于:https://www.cnblogs.com/cgjh/p/9412887.html

计算几何_线段交点的快速排斥_跨立实验相关推荐

  1. 判断两线段是否相交——快速排斥与跨立实验

    如何判断两条线段是否相交呢?如果是我们去解决这个问题,用眼睛很容易就看出来了,但是如果用计算机来解决这个问题,该怎么办呢?下面介绍两个方法,这两个方法结合起来就能完美解决这个问题了. 一.快速排斥 对 ...

  2. 计算几何 快速排斥和跨立实验 判断两线段相交

    线段P1P2, Q1Q2,判断其是否相交,通过快速排斥和跨立实验则说明相交 首先要知道:向量a×向量b(×为向量叉乘),若结果小于0,表示向量b在向量a的逆时针方向:若结果大于0,表示向量b在向量a的 ...

  3. 快速排斥、跨立实验判断线段是否相交

    写在前面 在其他博客中看到这方面的知识,很多都是重复,并且说的总是云里雾里的,所以这里我就自己总结一下这种问题如何求解,判断两个线段是否相交在前面我们提到了会用到叉积的一点知识,那么这里就来详细说一下 ...

  4. 线段相交(快速排斥和跨立)

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1264 本来想用斜率来算,后来觉得要分太多情况,上网发现用快速排斥+ ...

  5. 51nod 1264 线段相交(跨立实验)

    51nod1264:线段相交 判断线段相交: 关于快速排斥和跨立实验的博客:https://blog.csdn.net/li1615882553/article/details/80372202 在快 ...

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

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

  7. 【代码超详解】ZOJ 2551 / POJ 2653 Pick-up Sticks(快速排斥实验 + 跨立实验判断线段是否相交 · 模板)

    一.传送门 http://poj.org/problem?id=2653 https://zoj.pintia.cn/problem-sets/91827364500/problems/9182736 ...

  8. [GIS算法] 判断两线段是否相交的四种方案(快速排斥+跨立实验、参数方程求解、凸多边形、点在线的哪一侧)-附C语言实现

    文章目录 算法一:快速排斥+跨立试验 代码 算法二:参数方程求解 代码 算法三:凸多边形 算法四:点在线的哪一侧 算法一:快速排斥+跨立试验 重点掌握 [原理]利用矢量的叉乘 [图解] 代码 #def ...

  9. 计算几何——快速排斥实验和跨立实验

    两条线段有且仅有一个公共点,且这个点不是任何一条线段的端点时,称这两条线段是严格相交的. 也就是说线段不严格相交时可以将端点作为交点,但本文不讨论不严格相交,只讨论严格相交的情况(即使它们在算法实现上 ...

最新文章

  1. 单片机I/O控制方式(UART中断和DMA中断的区别)
  2. java 反射 getclass_java 反射getClass .class 的使用方法示例
  3. Verilog中的逻辑运算符与按位运算符的区分
  4. flask简单的登录demo
  5. Codeforces Round #375 (Div. 2) D. Lakes in Berland 并查集
  6. easyUI的引用顺序
  7. C语言中输入输出格式控制
  8. 【Pytorch神经网络理论篇】 11 卷积网络模型+Sobel算子原理
  9. idea server日志乱码_windows下,Kiwi_Syslog日志服务器的搭建
  10. Python随机梯度下降法(四)【完结篇】
  11. javaweb基于SSH开发汽车4S店管理系统(前台+后台) 课程设计 毕业设计源码
  12. linux cat命令追加,linux cat命令
  13. 第13期-在线的文章摘要生成器, 自己写了一个支持中文的
  14. 使用linux,导出mysql数据库信息,连接聚石塔
  15. 发送通知java带阿妈_变成了阴阳师的阿妈以后-阿妈回归(退坑通知)-变成了阴阳师的阿妈以后小说|变成了阴阳师的阿妈以后小说下载|SF轻小说...
  16. 学习平面设计有哪些前途
  17. 了解过什么是 DDD吗?一文带你掌握!(至尊典藏版)
  18. PCL库学习笔记——使用变换矩阵变换点云
  19. 110配线架打法图解_110配线架的打线方法图例
  20. android 监测属性值变化,Android 的系统属性(SystemProperties)分析 | Bob's Blo...

热门文章

  1. 从红帽公司的崛起聊聊开源商业模式
  2. C#飞行棋游戏源码WinForm版本详细教程
  3. 数据库的read_only模式
  4. Windows AD域备份
  5. 培训经历和培训现状,供开发人员参考
  6. OpenGL ES for Android 绘制立方体
  7. phpexcel mysql 导出_用phpexcel导出mysql数据库表到exc…
  8. 医疗信息化资源(1)
  9. 计算机毕业设计Java发电站(源码+系统+mysql数据库+lw文档)
  10. linux git command not found,安装git后显示git:command not found