(在三维空间中)我想找到一种方法来计算两个向量之间的带符号角度,而不需要任何除了这些向量之外的信息。如此问题中所回答的那样,可以通过给定向量垂直的平面的法向量来简单地计算带符号角度。但是,我无法在没有该值的情况下进行计算。显然,两个向量的叉积会产生这样的一个法向量,但是我遇到了上述答案中的矛盾:
signed_angle(x_dir, y_dir) == 90
signed_angle(y_dir, x_dir) == 90
我本来期望第二个结果是负数。这是因为在给定以下归一化输入的伪代码中,叉积cross(x_dir, y_dir)
与cross(y_dir, x_dir)
方向相反。
signed_angle(Va, Vb)
magnitude = acos(dot(Va, Vb))
axis = cross(Va, Vb)
dir = dot(Vb, cross(axis, Va))
if dir < 0 then
magnitude = -magnitude
endif
return magnitude
我不相信dir会变成负数。
我已经看到了使用建议的atan2方法解决同样问题的情况。
我正在寻找一种方法来使:
signed_angle(a, b) == -signed_angle(b, a)