Python 从直线到给定点的距离(直线的给定起点和终点)

Python 从直线到给定点的距离(直线的给定起点和终点),python,python-3.x,Python,Python 3.x,我试图写一个函数,返回点到直线的距离。我发现这个等式是: 下面是我的示例代码: 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 我知道我有更多的括号,然后我需要在那里,但我已经重写了

我试图写一个函数,返回点到直线的距离。我发现这个等式是:

下面是我的示例代码:

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)

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

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

你忘了在除法之前先计算方程的底部

print(abs(((y2-y1)*x0)-((x2-x1)*y0)+(x2*y1)-(y2*x1))/((((y2-y1)**2)+((x2-x1)**2))**0.5))

这是正确的,而且更干净

从数学导入sqrt
x1,y1=-1,0
x2,y2=1,0
x0,y0=0,1
dx=x2-x1
dy=y2-y1
dist=abs(dy*x0-dx*y0+x2*y1-y2*x1)/sqrt(dy*dy+dx*dx)
打印(区)

一种简单的方法,可以分解为多个语句:

import math
x1,y1 = -1,0
x2,y2 = 1,0
x0,y0 = 0,1
p=(y2-y1)*x0
q=(x2-x1)*y0
r=(x2*y1)-(y2*x1)
d=math.sqrt( (x2 - x1)**2 + (y2 - y1)**2 )
a=abs(p-q+r)
b=a/d
print (b)

把长方程分成几个语句。你可以把1/2写成0.5:)他没有比他需要的更多的括号。:)你能用几句话描述一下你的解决方案吗?
import math
x1,y1 = -1,0
x2,y2 = 1,0
x0,y0 = 0,1
p=(y2-y1)*x0
q=(x2-x1)*y0
r=(x2*y1)-(y2*x1)
d=math.sqrt( (x2 - x1)**2 + (y2 - y1)**2 )
a=abs(p-q+r)
b=a/d
print (b)
print(abs(((y2-y1)*x0)-((x2-x1)*y0)+(x2*y1)-(y2*x1))/pow((y2-y1)**2+(x2-x1)**2),.5)