本来想找一段求线段交点的代码,但是网上很多的代码都没有考虑除0的特殊情况,所以自己写了一份。具体原理:

一般方程法:

直线的一般方程为F(x) = ax + by + c = 0。既然我们已经知道直线的两个点,假设为(x0,y0), (x1, y1),那么可以得到a = y0 – y1, b = x1 – x0, c = x0y1 – x1y0。

因此我们可以将两条直线分别表示为

F0(x) = a0*x + b0*y + c0 = 0, F1(x) = a1*x + b1*y + c1 = 0

那么两条直线的交点应该满足

a0*x + b0*y +c0 = a1*x + b1*y + c1

由此可推出

x = (b0*c1 – b1*c0)/D

y = (a1*c0 – a0*c1)/D

D = a0*b1 – a1*b0, (D为0时,表示两直线重合)

二者实际上就是连立方程组F0(x) = a0*x + b0*y + c0 = 0, F1(x) = a1*x + b1*y + c1 = 0的叉积应用

原理参考了:https://blog.csdn.net/hktkfly6/article/details/69218777?utm_source=copy

def _calulate_corss_lines(line0_pos0, line0_pos1, line1_pos0, line1_pos1):

"""

求两条直线直接的交点

:param line0_pos0: 第一条直接的第一个点的坐标

:param line0_pos1: 第一条直接的第二个点的坐标

:param line1_pos0: 第二条直接的第一个点的坐标

:param line1_pos1: 第二条直接的第二个点的坐标

"""

# x = (b0*c1 – b1*c0)/D

# y = (a1*c0 – a0*c1)/D

# D = a0*b1 – a1*b0, (D为0时,表示两直线重合)

line0_a =line0_pos0.y - line0_pos1.y

line0_b = line0_pos1.x - line0_pos0.x

line0_c = line0_pos0.x *line0_pos1.y - line0_pos1.x * line0_pos0.y

line1_a =line1_pos0.y - line1_pos1.y

line1_b = line1_pos1.x - line1_pos0.x

line1_c = line1_pos0.x *line1_pos1.y - line1_pos1.x * line1_pos0.y

d = line0_a * line1_b - line1_a * line0_b

if d == 0:

# 重合的边线没有交点

return None

x = (line0_b * line1_c - line1_b * line0_c) * 1.0 / d

y = (line0_c * line1_a - line1_c * line0_a) * 1.0 / d

pt = cc.Vec2(x, y)

print 'pt=', pt

if (pt.x - line0_pos0.x) * (pt.x - line0_pos1.x) <= 0 and (pt.x - line1_pos0.x) * (pt.x - line1_pos1.x) <= 0:

# 判断交点是否在两条线段上

return pt

else:

# 交点不在两条线段上除外

return None

python求两条线段的交点相关推荐

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

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

  2. 两条线段的交点 交点

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

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

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

  4. 两条线段的交点的计算

    问题 已知线段P1P2和Q1Q2,判断它们是否有交点,若有,求出交点. 1.判断线段是否相交 如图,判断线段是否相交,可以通过一系列实验来进行. 快速排斥实验 若以P1P2和Q1Q2为对角线的矩形不相 ...

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

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

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

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

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

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

  8. 两条线段之间的最短距离

    python两条线段之间的最短距离 from shapely.geometry import LineString a=LineString([(1,1),(3,5)]) b=LineString([ ...

  9. 如何判断二维平面中,两条线段是否相交

    两条线段,1,2分别有点a,b c,d.取a点连接c点,d点形成的向量3,4分别与线段1进行叉乘,如果一正一负,继续将c点连接a点,b点,形成的向量5,6,分别与线段2进行叉乘,如果一正一负,则表示两 ...

最新文章

  1. NSJSONSerliazition文档翻译和使用
  2. **Java有哪些悲观锁的实现_面试4连问:乐观锁与悲观锁的概念、实现方式、场景、优缺点?...
  3. java追加txt文件_java怎么追加写入txt文件
  4. linux setsockopt详解
  5. 【优秀文章保存】webcollector抽取新闻正文
  6. 快速上手,使用 Kotlin 把支付宝小程序装进自己的 App
  7. VR创业公司Pico被字节跳动收购
  8. 基于注解的 Spring MVC(上)
  9. PHP动态生成select标签
  10. 安卓系统怎么样不Root激活XPOSED框架的方法
  11. 对外技术合作,一定要提供一个DEMO供别人参考
  12. SVN忽略设置的方法
  13. python使用阿里云企业邮箱发送邮件
  14. 【BZOJ4200】【UOJ132】【NOI2015】小园丁与老司机
  15. Davids阅读笔记:《如何阅读一本书》
  16. 这几个 GitHub 项目真带劲
  17. pyecharts制作3d地图加柱状图
  18. excel表格分割线一分为二_Anki+思维导图的两种方法(Anki+表格,Anki+幕布)
  19. 企业网络营销中需要避免的九大忌
  20. python爬虫一:必应图片(从网页源代码中找出图片链接然后下载)

热门文章

  1. [英语单词] inside-out
  2. linux查看cpu的负载
  3. 服装生产管理系统软件都有哪些实用功能?应该如何选购?
  4. getMeasuredWidth, getWidth 有什么区别?
  5. php开发环境搭建套件,PHP开发环境套件与自定义安装方法介绍
  6. LINUX学习基础篇(十七)用户与用户组
  7. MySQL数据库迁移方案比较和使用
  8. 花书笔记:第07章 深度学习中的正则化
  9. Pycharm安装sklearn失败
  10. 单项式计算机在线使用,16进制(CRC16)(多项式异或,多种)校验(2),循环冗余校验在线计算器_三贝计算网_23bei.com...