You need to enable JavaScript to run this app. Python线段相交检测程序运行异常:返回错误相交判断结果
优惠活动
大模型
产品
解决方案
定价
更多

Python线段相交检测程序运行异常:返回错误相交判断结果

问题出在哪

你写的line_intersection根本不是线段相交检测函数,它只判断两条线段所在的无限长直线平不平行,完全没管线段自身的长度范围。

为啥你的测试返回了错误的True

你代码里算的div是两个线段方向向量的行列式:

  • div == 0 只代表两条所在直线是平行/共线的,无限延长都碰不上
  • div != 0 只代表两条无限延长的直线肯定能找到交点,但这个交点大概率落在两条线段的端点外面,根本不属于任何一段实际的线段

你给的那组测试参数里,line1的斜率约为0.297,line2的斜率约为0.423,方向明显不平行,所以行列式算出来肯定不是0,函数想都不想就返回True了。但实际算坐标就能验证:

  • 在line2左端点x=120的位置,line1对应的y值约为206,而line2的y值是256,差了近50个单位
  • 在line2右端点x≈166.05的位置,line1对应的y值约为219.6,而line2的y值是275.47,又差了近56个单位

两条实际的线段根本挨不上,自然不存在相交的情况。

要做正确的线段相交判断,必须补的逻辑

排除平行场景后,还得做跨立校验:

  • 算line1的两个端点对line2所在直线的叉乘,看两个端点是不是分别在直线两边
  • 算line2的两个端点对line1所在直线的叉乘,看两个端点是不是也分别在直线两边
  • 碰到共线的特殊情况,还要额外判断端点是不是落在对方线段的坐标区间里,不然碰到共线不重叠、端点刚好碰到这类边界场景,判断肯定不准

内容的提问来源于stack exchange,提问作者hidden layer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 17:36:04