使用arctan2在Python中高效地计算三维符号角

2024-10-01 02:28:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理2个向量数组(shape=(100,3))和一个切向量数组(shape=(100,3)),希望得到最有效的方法来正确地得到向量之间的符号角,给定与这两个向量正交的切向量。我见过这个问题在stackoverflow上解决了2d,但不是使用arctan2的3d。我需要使用arctan2而不是ACO,因为潜在的小角度。我有一个自定义函数来计算沿着正确轴的叉积的范数(称为normrow),但是在使用范数计算正弦角时,我丢失了符号信息。在正弦角上保持正确符号的最有效方法是什么,以便arctan2返回-pi和pi之间的正确值?在

from numpy import cross, reshape, einsum

def v_angle(v1, v2, tangent):
        cos_ang = einsum('ij, ij -> i', v1, v2).reshape(-1, 1)
        sin_ang  = normrow(cross(v1, v2))
        return arctan2(sin_ang, cos_ang))

求叉积和切向量的点积的符号的最佳方法是什么?我试过两种方法,第二种稍微快一点。在

^{pr2}$

对于10000000的样本量:

Output:
wrong sign 1.20736s
correct sign v1 1.97774s
correct sign v2 1.38374s

Tags: 方法范数pi符号数组向量v2v1