代码实现:

import numpy as np
import cv2class Check_line():def __init__(self):passdef step_one(self, p1, p2, q1, q2):"""1、执行第一步,进行快速排斥实验-----直线AB与直线CD:param p1: A点坐标:param p2: B点坐标:param q1: C点坐标:param q2: D点坐标"""reslut_1 = min(p1[0], p2[0]) <= max(q1[0], q2[0])reslut_2 = min(q1[0], q2[0]) <= max(p1[0], p2[0])reslut_3 = min(p1[1], p2[1]) <= max(q1[1], q2[1])reslut_4 = min(q1[1], q2[1]) <= max(p1[1], p2[1])if reslut_1 and reslut_2 and reslut_3 and reslut_4:return Trueelse:return Falsedef step_two(self, p1, p2, q2, q1):"""2.执行第二步:跨立实验:param p1: A点坐标:param p2: B点坐标:param q2: C点坐标:param q1: D点坐标:return:"""# [(P1x-Q1x)*(Q2y-Q1y)-(P1y-Q1y)*( Q2x-Q1x)]       *           [(Q2x-Q1x)*(P2y-Q1y)-(Q2y-Q1y)*(P2x-Q1x)] > 0result_1 = (p1[0] - q1[0]) * (q2[1] - q1[1]) - (p1[1] - q1[1]) * (q2[0] - q1[0])result_2 = (q2[0] - q1[0]) * (p2[1] - q1[1]) - (q2[1] - q1[1]) * (p2[0] - q1[0])#     [(Q1x-P1x)*(P1y-P2y)-(Q1y-P1y)*( P2x-P1x)]        *            [(P2x-P1x)*(Q2y-P1y)-(P2y-P1y)*(Q2x-P1x)] > 0result_3 = (q1[0] - p1[0]) * (p1[1] - p2[1]) - (q1[1] - p1[1]) * (p2[0] - p1[0])result_4 = (p2[0] - p1[0]) * (q2[1] - p1[1]) - (p2[1] - p1[1]) * (q2[0] - p1[0])return (result_1 * result_2 > 0) and (result_3 * result_4 > 0)def __call__(self, *args, **kwargs):passif __name__ == '__main__':img = np.zeros((401, 401, 3), np.uint8)a = (199, 199)b = (220, 220)c = (400, 0)d = (0, 400)cv2.line(img, a, b, (255, 255, 255), 1)cv2.line(img, c, d, (255, 255, 255), 1)line = Check_line()# 进行快速排斥实验temp = line.step_one(a, b, c, d)print(temp)temp_two = line.step_two(a, b, c, d)print(temp_two)cv2.imshow("temp", img)cv2.waitKey(0)cv2.destroyAllWindows()

显示效果如下:

判断两个线段相交问题(快速排斥实验跨立实验)相关推荐

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

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

  2. 计算几何_线段交点的快速排斥_跨立实验

    附上题的地址 https://vjudge.net/problem/HDU-1086# // 点是否在矩形 // 矩形点是 st 和 ed bool IsPointInRectangle(Point ...

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

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

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

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

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

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

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

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

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

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

  8. caioj1212:【计算几何】判断线段相交(快速排斥判断与跨立实验)

    首先,欢迎大家来访问我老师的OJ:小白菜OJ 你是新入门OI的小白吗? 你正在苦于网上的资料不足吗? 你正在因各种blog写得不清不楚.艰涩难懂.千篇一律.满篇术语像LB一样而烦恼吗? 欢迎来到小白菜 ...

  9. 线段交叉判断(快速排斥实验 + 跨立实验)

    第1 步:快速排斥试验,如果分别以P1P2 ,P3P4 为对角线做矩形,而这两个矩形不相交,则这两条线段肯定不相交,如下左图:即使两个矩形相交,这两条线段也不一定相交,如下右图,这时再用第2 步判断: ...

最新文章

  1. 推荐8个超实用的神级工具,值得收藏起来!
  2. 如何使用MatPlotLib绘制出具有两个 Y 轴的曲线图?
  3. 来个邪恶假说,假如有人把支付宝所有存储服务器炸了,我们在里边的钱是不是都丢了?
  4. php读程序,PHP 读取大文件程序代码
  5. 联想打印机7256显示更换墨盒_惠普打印机涉嫌垄断?只认自家“昂贵”墨盒,成本太高招架不住...
  6. Python--day48--ORM框架SQLAlchemy操作表
  7. Nest入门教程 - 初识Providers
  8. 华为c8818刷原生Android 6,华为C8818刷机教程_华为C8818强刷官方rom系统包
  9. 语言表达能力强的人真的就情商高吗?
  10. 解决小米手机用Android studio安装不了app的问题
  11. SQL注入:搜索型注入
  12. skewx 字体模糊_为什么网站设计宋体消除锯齿要用无,而其他字体如黑体用平滑,还有英文字体要用那种消除锯齿方式?...
  13. python语言关键字的是_不属于Python语言关键字的是( )
  14. dr优先级默认_OSPF路由器不能成为DR/BDR唯一的方法:DR优先级=0
  15. 电容笔和触控笔有什么区别?第三方电容笔了解下
  16. File 和 InputStream, OutputStream 的用法
  17. 携手阿里和暴风重磅发布的小辣椒PLAYER到底有哪些黑科技?
  18. 走出心理舒适区的七个最佳方法
  19. 关于转行中医途径的一点思索
  20. 02华为大数据HCIE_Data Mining 数学基础 测试一下

热门文章

  1. 隐函数+导数定义思路
  2. 对于32位系统利用lui ori 获得32位数的操作
  3. 服务器修改uefi,服务器 uefi bios设置
  4. 解决app项目出现Are you interested in participation的问题
  5. Java工具类Result
  6. pytorch中的detach()函数的作用
  7. 如何将2万条数据快速导入到 MySQL?
  8. SpringBoot+Vue下载Excel文件流(No converter、Excel乱码)
  9. What is YAML? Ain't
  10. 账户登录失败获取bdstoken失败_解决PanDownload登录提示账号登录失败,获取bdstoken失败问题...