求俩向量角度 允许超过180度 python

原理:将2维向量扩展到3维向量,求叉乘得到新向量,检查新向量的第三维坐标是正的还是负的,即可判断角度属于0-180还是180-360

import numpy as np

def calc_angle_2(v1, v2):
    '''
    支持大于180度计算
    :param v1:
    :param v2:
    :return:
    '''
    r = np.arccos(np.dot(v1, v2) / (np.linalg.norm(v1, 2) * np.linalg.norm(v2, 2)))
    deg = r * 180 / np.pi

    a1 = np.array([*v1, 0])
    a2 = np.array([*v2, 0])

    a3 = np.cross(a1, a2)

    if np.sign(a3[2]) > 0:
        deg = 360 - deg

    return deg

print(calc_angle_2([0, 1], [1, 0]))
# 输出90
print(calc_angle_2([1, 0], [0, 1]))
# 输出270
print(calc_angle_2([1, 0], [-1, 0]))
# 输出180

你可能感兴趣的:(数学,python,求向量角度,算法)