问题

已知线段P1P2和Q1Q2,判断它们是否有交点,若有,求出交点。

1.判断线段是否相交

如图,判断线段是否相交,可以通过一系列实验来进行。

快速排斥实验

若以P1P2和Q1Q2为对角线的矩形不相交,则P1P2肯定不相交
只有当
min(p1.x,p2.x) <= max(q1.x,q2.x)
min(q1.x,q2.x) <= max(p1.x,p2.x)
min(p1.y,p2.y) <= max(q1.y,q2.y)
min(q1.y,q2.y) <= max(p1.y,p2.y)
四个式子都满足时,两线段才有可能相交,否则比不相交。此即为快速排斥实验

跨立实验

根据上图可知,即使通过了快速排斥实验,两直线也不一定相交,因此,我们需要进一步通过所谓的跨立实验进行判断。
这部分内容可以直接参见链接

2.线段交点的计算

设 P 1 ( x 1 , y 1 ) , P 2 ( x 2 , y 2 ) , Q 1 ( x 3 , y 3 ) , Q 2 ( x 4 , y 4 ) P_1(x_1,y_1),P_2(x_2,y_2),Q_1(x_3,y_3),Q_2(x_4,y_4) P1​(x1​,y1​),P2​(x2​,y2​),Q1​(x3​,y3​),Q2​(x4​,y4​),则 P 1 P 2 P_1P_2 P1​P2​和 Q 1 Q 2 Q_1Q_2 Q1​Q2​的交点计算如下:

之所以觉得跨立实验意义不大,是因为跨立实验的计算量和直接计算交点的计算量没有很大的差别,我们可以直接通过计算直线交点,然后判断交点是否位于线段上来进行,判断的准则如下:
m a x ( x 1 , x 2 ) ≥ x o ≥ m i n ( x 1 , x 2 ) max(x_1,x_2)\ge x_o\ge min(x_1,x_2) max(x1​,x2​)≥xo​≥min(x1​,x2​) m a x ( x 3 , x 4 ) ≥ x o ≥ m i n ( x 3 , x 4 ) max(x_3,x_4)\ge x_o\ge min(x_3,x_4) max(x3​,x4​)≥xo​≥min(x3​,x4​)

两条线段的交点的计算相关推荐

  1. 两条线段的交点 交点

    两条线段的交点 解题思路 下面分别讨论三种情况 四点组成四边形 四点组成三角形 四点共线 代码 题目: 面试题 16.03. 交点 解题思路 思路: 两条直线相交:叉乘,向量叉乘 符号为逆时针旋转共线 ...

  2. 用Python求两条线段的交点,包括延长线的交点

    用Python求两条线段的交点,包括延长线的交点 代码 结果如图 代码 import numpy as np import matplotlib.pyplot as pltdef line_inter ...

  3. 【数学计算】判断两条线段是否相交+计算两条线段的交点和夹角

    序言 还是那句话,学习是为了应用.书到用时方恨"用得少" 1. 计算两条直线的交点 直线一般式方程 A x + B y + C = 0 Ax+By+C = 0 Ax+By+C=0 ...

  4. 两条线段求交点+叉积求面积 poj 1408

    题目链接:https://vjudge.net/problem/POJ-1408 题目是叫我们求出所有四边形里最大的那个的面积. 思路:因为这里只给了我们正方形四条边上的点,所以我们要先计算横竖线段两 ...

  5. python求两条线段的交点

    本来想找一段求线段交点的代码,但是网上很多的代码都没有考虑除0的特殊情况,所以自己写了一份.具体原理: 一般方程法: 直线的一般方程为F(x) = ax + by + c = 0.既然我们已经知道直线 ...

  6. 两条线段是否相交,计算交点公式。

    A本身无限长,假设B也无限长,直接求得AB的交点坐标,然后再判断该坐标是否在定长线段B的内部就可以了啊 AB本身就是两条直线,知道两端点就可以知道其直线方程,B也是一样,两个方程联立,     得到一 ...

  7. 二维空间内,如何判断两条线段是否相交,相离,平行,重合,并求交点

    首先,假设有两条线段p,q,求这两条线段的空间关系. 我们把两条线段的四个顶点看为向量,用坐标表示:p1(p1x,p1y), p2(p2x,p2y), q1(q1x,q1y), q2(q2x, q2y ...

  8. 判断两条线段/直线相交,并求交点

      一.矢量基本知识     因为后面的计算需要一些矢量的基本知识,这里只是简单的列举如下,如果需要更加详细的信息,可以自行搜索wikipedia或google. 1.矢量的概念:如果一条线段的端点是 ...

  9. Unity3D C#数学系列之判断两条线段是否相交并求交点

    1 引言 问题:已知三维空间中四点A.B.C.D,如何判断线段AB与CD是否相交,若相交则求出交点. 分析: AB.CD要相交,则AB.CD必须要在同一平面内 快速排斥和跨立实验判断是否相交 几何法分 ...

最新文章

  1. 一个sql的执行过程详解
  2. 数字化时代,如何解决企业协同办公的问题?
  3. Integer的127与128
  4. Exception in thread “main“ java.lang.UnsupportedOperationException Arrays.asList中add报错
  5. maya如何导出ue4_ue4 maya max导入导出问题
  6. html5实例-闪烁的星星
  7. 浏览器端的九种缓存机制介绍
  8. java 两个项目 生成唯一id_java方式生成唯一id
  9. leetcode每日刷题计划-简单篇day6
  10. LeetCode算法扫题系列19
  11. harmonyos 2.0开机动画壁纸,华为鸿蒙OS 2.0开机动画
  12. 基于三维冲击波的变分理论--交通运输工程(一)
  13. 每周分享第 18 期
  14. 凯利公式(庄家必胜篇)——致放假在家的高薪程序员们
  15. java 毛笔字,Photoshop设计唯美大气的毛笔字
  16. I2P和TOR 有趣网络精灵
  17. can‘t connect to mysql server on localhost解决办法。 net start mysql——无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。
  18. 计算机的USB是什么,usb2.0和3.0的区别,教您电脑usb2.0和3.0的有什么区别
  19. 机器学习流程是什么?简述机器学习流程!
  20. 计算机键盘灯光怎么关闭,笔记本怎么关键盘的灯_笔记本电脑关闭键盘背光的步骤-win7之家...

热门文章

  1. IEEE 802.1AS-2011 第七章 桥接局域网的时间同步模型
  2. 绝地求生服务器维护得多长时间,绝地求生7月7日服务器维护需要多长时间?绝地求生维护公告介绍...
  3. 华为最新5G手机供应商名单来了。。。
  4. 我,微软,700亿美金买暴雪怎么了?
  5. Python Pcan USB通信(基于PcanBus)
  6. Android9.0 网络框架之--Tethering 热点
  7. mysql + excel 校正线上数据
  8. 软件测试项目实战案例分解,跟着我一步一步操作【人力资源管理系统】
  9. Redis 入门和 RedisTemplate 常用方法(常用命令 + 案例源码)
  10. 基于虹软人证核验 2.0 Android SDK开发集成入门