numpy计算两条直线的角度

可以把计算两条直线的角度转换成计算两个向量的角度问题,这样可以用numpy的点乘(np.dot())很好地解决,可以很容易扩展维度(从平面扩展到空间或者更高维度)

def unit_vector(vector):
    """ Returns the unit vector of the vector.  """
    return vector / np.linalg.norm(vector)


def angle_between(v1, v2):
    """ Returns the angle in radians between vectors 'v1' and 'v2'::

            angle_between((1, 0, 0), (0, 1, 0))
            1.5707963267948966
            angle_between((1, 0, 0), (1, 0, 0))
            0.0
            ngle_between((1, 0, 0), (-1, 0, 0))
            3.141592653589793
    """
    v1_u = unit_vector(v1)
    v2_u = unit_vector(v2)
    return np.arccos(np.clip(np.dot(v1_u, v2_u), -1.0, 1.0))

# 假设计算直线p11p12和直线p21p22的夹角
p11 = [1, 2, 3]
p12 = [2, 3, 4]
p21 = [3, 4, 5]
p22 = [4, 5, 6]
v1 = np.array(np.array(p11)-np.array(p12))  
v2 = np.array(np.array(p21)-np.array(p22))
angle12 = angle_between(v1, v2)

代码参考https://stackoverflow.com/questions/2827393/angles-between-two-n-dimensional-vectors-in-python

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值