python求两条线段的交点
本来想找一段求线段交点的代码,但是网上很多的代码都没有考虑除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求两条线段的交点相关推荐
- 用Python求两条线段的交点,包括延长线的交点
用Python求两条线段的交点,包括延长线的交点 代码 结果如图 代码 import numpy as np import matplotlib.pyplot as pltdef line_inter ...
- 两条线段的交点 交点
两条线段的交点 解题思路 下面分别讨论三种情况 四点组成四边形 四点组成三角形 四点共线 代码 题目: 面试题 16.03. 交点 解题思路 思路: 两条直线相交:叉乘,向量叉乘 符号为逆时针旋转共线 ...
- 【数学计算】判断两条线段是否相交+计算两条线段的交点和夹角
序言 还是那句话,学习是为了应用.书到用时方恨"用得少" 1. 计算两条直线的交点 直线一般式方程 A x + B y + C = 0 Ax+By+C = 0 Ax+By+C=0 ...
- 两条线段的交点的计算
问题 已知线段P1P2和Q1Q2,判断它们是否有交点,若有,求出交点. 1.判断线段是否相交 如图,判断线段是否相交,可以通过一系列实验来进行. 快速排斥实验 若以P1P2和Q1Q2为对角线的矩形不相 ...
- 二维空间内,如何判断两条线段是否相交,相离,平行,重合,并求交点
首先,假设有两条线段p,q,求这两条线段的空间关系. 我们把两条线段的四个顶点看为向量,用坐标表示:p1(p1x,p1y), p2(p2x,p2y), q1(q1x,q1y), q2(q2x, q2y ...
- 两条线段求交点+叉积求面积 poj 1408
题目链接:https://vjudge.net/problem/POJ-1408 题目是叫我们求出所有四边形里最大的那个的面积. 思路:因为这里只给了我们正方形四条边上的点,所以我们要先计算横竖线段两 ...
- Unity3D C#数学系列之判断两条线段是否相交并求交点
1 引言 问题:已知三维空间中四点A.B.C.D,如何判断线段AB与CD是否相交,若相交则求出交点. 分析: AB.CD要相交,则AB.CD必须要在同一平面内 快速排斥和跨立实验判断是否相交 几何法分 ...
- 两条线段之间的最短距离
python两条线段之间的最短距离 from shapely.geometry import LineString a=LineString([(1,1),(3,5)]) b=LineString([ ...
- 如何判断二维平面中,两条线段是否相交
两条线段,1,2分别有点a,b c,d.取a点连接c点,d点形成的向量3,4分别与线段1进行叉乘,如果一正一负,继续将c点连接a点,b点,形成的向量5,6,分别与线段2进行叉乘,如果一正一负,则表示两 ...
最新文章
- NSJSONSerliazition文档翻译和使用
- **Java有哪些悲观锁的实现_面试4连问:乐观锁与悲观锁的概念、实现方式、场景、优缺点?...
- java追加txt文件_java怎么追加写入txt文件
- linux setsockopt详解
- 【优秀文章保存】webcollector抽取新闻正文
- 快速上手,使用 Kotlin 把支付宝小程序装进自己的 App
- VR创业公司Pico被字节跳动收购
- 基于注解的 Spring MVC(上)
- PHP动态生成select标签
- 安卓系统怎么样不Root激活XPOSED框架的方法
- 对外技术合作,一定要提供一个DEMO供别人参考
- SVN忽略设置的方法
- python使用阿里云企业邮箱发送邮件
- 【BZOJ4200】【UOJ132】【NOI2015】小园丁与老司机
- Davids阅读笔记:《如何阅读一本书》
- 这几个 GitHub 项目真带劲
- pyecharts制作3d地图加柱状图
- excel表格分割线一分为二_Anki+思维导图的两种方法(Anki+表格,Anki+幕布)
- 企业网络营销中需要避免的九大忌
- python爬虫一:必应图片(从网页源代码中找出图片链接然后下载)
热门文章
- [英语单词] inside-out
- linux查看cpu的负载
- 服装生产管理系统软件都有哪些实用功能?应该如何选购?
- getMeasuredWidth, getWidth 有什么区别?
- php开发环境搭建套件,PHP开发环境套件与自定义安装方法介绍
- LINUX学习基础篇(十七)用户与用户组
- MySQL数据库迁移方案比较和使用
- 花书笔记:第07章 深度学习中的正则化
- Pycharm安装sklearn失败
- 单项式计算机在线使用,16进制(CRC16)(多项式异或,多种)校验(2),循环冗余校验在线计算器_三贝计算网_23bei.com...