python——点到直线的欧式距离实现
在之前我已经写过vertical distance的python实现(详情参见【1】)。
首先看一下点到直线的距离公式:
我们把它变形一下:
由于直线方程为:Ax+By+C=0,所以可知直线斜率k=-(A/B),直线截距h=-(C/B)。
那么方程就可以写为:
其与vertical distance相比,就多了一个根号下k方+1。因此我们直接在vertical distance的基础上进行改造就可以了。
这是vertical distance:
def vertical_distance(k,h,pointIndex):
'''
计算一个点到某条直线的vertical distance
:param k: 直线的斜率,float类型
:param h: 直线的截距,float类型
:param pointIndex: 一个点的坐标,(横坐标,纵坐标),tuple类型
:return: 点到直线的vertical distance,float类型
'''
x=pointIndex[0]
y=pointIndex[1]
theDistance=math.fabs(h+k*(x-0)-y)
return theDistance
欧式距离的实现:
def euclidean_distance(k,h,pointIndex):
'''
计算一个点到某条直线的euclidean distance
:param k: 直线的斜率,float类型
:param h: 直线的截距,float类型
:param pointIndex: 一个点的坐标,(横坐标,纵坐标),tuple类型
:return: 点到直线的euclidean distance,float类型
'''
x=pointIndex[0]
y=pointIndex[1]
theDistance=math.fabs(h+k*(x-0)-y)/(math.sqrt(k*k+1))
return theDistance
参考资料
【1】语雀——python—vertical distance的实现