(在三个维度上)我正在寻找一种方法来计算两个向量之间的符号角度,除了这些向量之外没有任何信息。正如在这个问题中所回答的那样,在给定向量垂直的平面的法线的情况下计算有符号角度很简单。但是如果没有这个价值,我就无法做到这一点。很明显,两个向量的叉积会产生这样的法线,但是我使用上面的答案遇到了以下矛盾:
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)