python - 从线到给定点的距离(给定线的起点和终点)

标签 python python-3.x

我正在尝试编写一个函数来返回点与线的距离。我在 wikipedia 上找到了这个方程:

enter image description here

这是我的示例代码:

x1,y1 = -1,0
x2,y2 = 1,0
x0,y0 = 0,1 #should be exactly 1 away from the line 
print(abs(((y2-y1)*x0)-((x2-x1)*y0)+(x2*y1)-(y2*x1))/(((y2-y1)**2)+((x2-x1)**2))**1/2)

输出:0.25

预期:1.0

我知道我有更多的括号,但我已经重写了 3 次,试图使其正确,并希望确保我没有弄错操作顺序。

顺便问一下,是否有人知道如何在 python 中输入更长的方程,而不会让它们变得如此困惑,我洗耳恭听。

感谢您的帮助!

最佳答案

当您编写 x**1/2 时,您将 x 计算为 1 次方(即 x) ,然后将结果除以 2 (因此 x**1/2 == x/2),为避免这种情况,可以使用括号、.5 或(更好)使用 math.sqrt(x):

print(abs(((y2-y1)*x0)-((x2-x1)*y0)+(x2*y1)-(y2*x1))/(((y2-y1)**2)+((x2-x1)**2))**(1/2))
# => 1.0
print(abs(((y2-y1)*x0)-((x2-x1)*y0)+(x2*y1)-(y2*x1))/(((y2-y1)**2)+((x2-x1)**2))**.5)
# => 1.0
# Or
from math import sqrt
print(abs(((y2-y1)*x0)-((x2-x1)*y0)+(x2*y1)-(y2*x1))/sqrt(((y2-y1)**2)+((x2-x1)**2)))
# => 1.0

此外,为了避免像这样的长表达式,请通过为每个表达式分配一个函数来分隔它们:

def pDistp(x1, y1, x2, y2):
    return (((y2-y1)**2)+((x2-x1)**2))**.5
def numerator(x0, y0, x1, y1, x2, y2):
    return abs(((y2-y1)*x0)-((x2-x1)*y0)+(x2*y1)-(y2*x1))

x1,y1 = -1,0
x2,y2 = 1,0
x0,y0 = 0,1
print(numerator(x0, y0, x1, y1, x2, y2) / pDistp(x1, y1, x2, y2))
# => 1.0

关于python - 从线到给定点的距离(给定线的起点和终点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46325210/

相关文章:

python-3.x - pxd 相对 cimport 适用于 language_level 2,但不适用于 language_level 3

Python HTTP请求替换bash的curl

python - 从矩阵乘法的角度理解马尔可夫链

python - python中列表的减法,优化速度

python - 如何编写一个 for 循环来迭代各种形式的可迭代对象?

python - 值错误 : Dependency on app with no migrations: customuser

python - 如何在 Sprite 的底部添加额外的图像或矩形?

python - 如果将列表附加到自身会发生什么?

python - 链接器错误 : C/C++ Extensions for python

python - 脚本中的 UTF 8 不匹配