python 点到模型的距离_python——点到直线的欧式距离实现

4625db48220315dac52853ac15cf66c8.png

python——点到直线的欧式距离实现

在之前我已经写过vertical distance的python实现(详情参见【1】)。
首先看一下点到直线的距离公式:

619d2333347a329b1fb159d7d8383fef.png


我们把它变形一下:

30d3c97e738eec24721252105a8839ec.png


由于直线方程为:Ax+By+C=0,所以可知直线斜率k=-(A/B),直线截距h=-(C/B)。
那么方程就可以写为:

bfe1450d62bfba0a00f1e16a8f3b3832.png


其与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的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值