如何使用numpy计算2D向量和OX之间的角度?

3

假设我有一个2D的numpy数组如下:

import numpy as np
v = np.array([1, 2])

我将考虑它作为一个二维平面上的向量,具有OX和OY轴。我很好奇,是否有内置的或相当优雅的方法来计算向量与OX轴之间的角度?该角度应从-PI到PI。我知道,我可以使用numpy.arctan来进行计算:
def calc_phi(v):
    if v[0] > 0:
        return np.arctan(v[1] / v[0])
    else:
        if v[1] > 0:
            if v[0] < 0:
                return np.pi + np.arctan(v[1] / v[0])
            else:
                return np.pi
        elif v[1] < 0:
            if v[0] < 0:
                return -np.pi + np.arctan(v[1] / v[0])
            else:
                return -np.pi
        else:
            return 0.0

但这似乎不太优雅,因为我必须单独考虑x = 0和x < 0的情况。所以我认为,numpy可能有一个特殊函数来计算它。


你尝试过使用 arctan2 吗? - rpanai
1个回答

3

您可以使用 np.arctan2 函数:

np.arctan2(*v)

然而,由于角度是从y轴开始的:
   |->
   |  \   #so this is the positive direction
   |   
-------
   |
   |

图表可能不会有帮助


需要交换参数以使其从X计算角度:

np.arctan2(v[1], v[0])

谢谢,这就是我要找的函数。但实际上,我不需要乘以2。相反,我需要np.arctan2(v[1], v[0])来得到与OX轴的夹角。 - Fomalhaut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接