假设我有一个二维旋转矩阵:
cos(t) -sin(t) 0
sin(t) cos(t) 0
0 0 1
如何获取正确的旋转角度?
如果您在第一个元素上使用acos,您只会得到介于0和pi之间的值。问题是,如果t小于0怎么办(当然我不知道t是多少;))?
大多数C家族编程语言中的函数atan2()
接受y和x值,并计算它们之间比率的反正切,考虑两个术语的符号以给出正确的全圆角度。
atan2( sin(t), cos(t) )
在范围(-pi,+pi]内返回(近似)t
。
有无限多个t
可以满足整数n
的解(t + 2*pi()*n
)。如果您使用acos(cos(t))
,您将得到0到pi之间的结果,但如果您还检查asin(sin(t))
,您将能够确定旋转是顺时针还是逆时针。