Python 3.x 函数以查找在python中给定两点的直线上是否有一个点

Python 3.x 函数以查找在python中给定两点的直线上是否有一个点,python-3.x,Python 3.x,我需要的是一个函数,当给定三个坐标时,它将从前两个坐标确定一条直线,然后取第三个坐标,看看它是否落在直线上,如果坐标落在直线上,则返回一个布尔值,指示真,如果坐标不落在直线上,则返回一个假。 到目前为止,我只有一个函数,从给定的前两个坐标求直线的斜率。我知道我可以取斜率和前两个坐标,找到直线方程,然后用直线方程取第三个坐标,看看它是否在直线上。但是,我不能使用这个方程,因为y和x没有赋值,有没有其他方法可以计算这个呢?你接近于一个理论上正确的函数,可以处理完美(无错误)的数据 潜伏者的建议是将上

我需要的是一个函数,当给定三个坐标时,它将从前两个坐标确定一条直线,然后取第三个坐标,看看它是否落在直线上,如果坐标落在直线上,则返回一个布尔值,指示真,如果坐标不落在直线上,则返回一个假。
到目前为止,我只有一个函数,从给定的前两个坐标求直线的斜率。我知道我可以取斜率和前两个坐标,找到直线方程,然后用直线方程取第三个坐标,看看它是否在直线上。但是,我不能使用这个方程,因为y和x没有赋值,有没有其他方法可以计算这个呢?

你接近于一个理论上正确的函数,可以处理完美(无错误)的数据

潜伏者的建议是将上述平等测试转化为等效测试

def is_on_line(x1, y1, x2, y2, x3, y3):
    slope = (y2 - y1) / (x2 - x1)
    return y3 - y1 == slope * (x3 - x1)

print(is_on_line(0, 0, 1, 1, 2, 2))
# True

然而,对于任意浮点数,无论使用什么标准,都不可能完全相等。所以你必须测试“足够近”。您可以减去斜率,然后测试差值是否足够接近0。或者你可以除以斜率,然后测试接近1的值。我要做的是查找点和线之间的垂直距离的公式,并测试该距离是否“足够接近”为0。

为什么不计算坐标2和坐标3之间的斜率,看看它是否与坐标1和坐标2计算的斜率匹配?带变量的直线方程本身并不重要。你应该关心的是斜坡。嗨,为什么这对我不起作用?打印(在第行(168.0451,-44.3994168.0480,-44.3987168.0466,-44.3990)上)返回false。理想情况下,它应该返回true。return语句中比较的两个表达式相差3.793103447704752e-05。正如我所说,is_on_line是用于无限精度的理想情况,实际功能需要测试“足够接近”,由用户决定。
def is_on_line(x1, y1, x2, y2, x3, y3):
    slope = (y2 - y1) / (x2 - x1)
    return y3 - y1 == slope * (x3 - x1)

print(is_on_line(0, 0, 1, 1, 2, 2))
# True
(y3 - y1) / (x3 - x1) == slope