python判断两线段是否相交_判断两线段是否相交

算法一

1. 快速排斥实验:设一线段P1P2为对角线的矩形为P,设一线段Q1Q2为对角线的矩形为Q,如果P和Q不相交,显然两线段不会相交。

以下2种(方法1、方法2)方法判断矩形是否相交仅限于正矩形。

方法1:已知2个正矩形rect1: {(minx1, miny1), (maxx1,maxy1)}, rect2: {(minx2,miny2), (maxx2, maxy2)},设两个正矩形相交一定得到一个正矩形rect: {(minx, miny), (maxx, maxy)},如果minx > maxx 或 miny > maxy则该2个正矩形rect1和rect2不相交。

方法2:两个正矩形的重心距离在X和Y轴上都小于两个矩形长或宽的一半之和。

方法3:如果是非正矩形,那么需要矩形的每个边与另一个矩形每一条边判断是否相交,并且包含关系来判断矩形是否相交。如果不希望计算也可以递归使用本章节计算方法(快速排斥实验+跨立实验)。在计算线段是否相交的时候转换为正矩形是否相交,通过比较来实现矩形是否相交。

2.跨立实验:如果2个线段相交,则两个线段必然互相跨立对方。若P1P2的跨立Q1Q2,则矢量(P1-Q1)和(P2-Q1)位于(Q2-Q1)的两侧,(通过矢量叉积判断拐向)即 (P1-Q1)x(Q2-Q1)x(P2-Q1)x(Q2-Q1) < 0,通过交换律可得 (P1-Q1)x(Q2-Q1)x(Q2-Q1)x(P2-Q1) > 0。当(P1-Q1)x(Q2-Q1) = 0时,说明(P1-Q1)和(Q2-Q1)共线,因为已经通过了快速排斥,所以P1一定是在Q1Q2上。同理Q2-Q1)x(P2-Q1) = 0,则P2一定是在Q1Q2上。综上P1P2和Q1Q2互

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值