python点到直线的距离_Python编程实现点到直线距离计算

在实现TextMountain时,生成TCBP时需要计算文本区域点到四条边的距离,由于计算量大,所以最好是使用矩阵运算,提高运行效率。

基础讲解:

由于需要使用到矩阵运算,最好采用向量的方法来进行表示。

为了讲述方便,我们设直线为x轴,用向量oq表示,对于点p,要计算p到直线oq的距离,我们可以任取直线上一点(这里取o)得到向量op,根据图中公式可以求得点到直线的垂足d到点p的向量dp(x,y),则点到直线的距离为sqrt(xx+yy)

编程实现

def get_pt_line_dis(pt, line, lpt):

‘‘‘

获取点到直线的距离

:param pt: 点坐标,[n,2]

:param line: 直线向量 [m,2]

:param lpt: 直线上的一个点 [m,2]

:return: 点与直线的距离以及直线到点的垂直单位向量

‘‘‘

EPS=10-9

pt = np.tile(pt[:, np.newaxis, :], (1, line.shape[0], 1)) #[n,m,2]

line = np.tile(line[np.newaxis, ...], (pt.shape[0], 1, 1)) #[n,m,2]

lpt = np.tile(lpt[np.newaxis, ...], (pt.shape[0], 1, 1)) #[n,m,2]

array_trans = pt - lpt #[n,m,2] array_trans[i,j]表示第i个点与第j条直线某端点组成的向量,图中op

array_temp = np.sum(array_trans * line, axis=2) / (line[..., 0] ** 2 + line[..., 1] ** 2) #[n,m]

array_temp = np.tile(array_temp[..., np.newaxis], (1, 1, 2)) #[n,m,2]

array_temp = array_temp * line #[n,m,2]计算图中od

v = array_trans - array_temp #图中dp [n,m,2] v[i,j]表示第i个点与第j条直线的垂直向量

distance = np.linalg.norm(v, axis=2)

v = v / (distance[..., np.newaxis] + EPS)

return distance, v

原文:https://www.cnblogs.com/oiwio-wsf/p/12622963.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值