我有一个案例,基于将一个点投影到一条线上,然后在这条线上将其分离。我的用例稍微复杂一些,但我的问题可以通过以下代码进行复现:
from shapely import *
line1 = LineString([(1,1.2), (2,2), (3, 2.), (4,1.2)])
pt = Point(2.5, 1.2)
pr = line1.interpolate(line1.project(pt))
按照构造,"pr" 应该在第一行,它们的交点也应在第一行:
line1.contains(pr)
line1.intersects(LineString([pt, pr]))
打印两次“True”。但是稍微改变输入的坐标会导致工作流程中断:
from shapely import *
line1 = LineString([(1,1.2), (2,2), (3, 2.3), (4,1.2)])
pt = Point(2.5, 1.2)
pr = line1.interpolate(line1.project(pt))
line1.contains(pr)
line1.intersects(LineString([pt, pr]))
打印出“False”。
我明白这背后的浮点精度问题,但这是否意味着我永远不能测试点是否在直线上?当我基于点列表构建一条直线时,我能够确定至少所有“构建”点都在该直线上吗?