Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设我有一个二维旋转矩阵:
cos(t) -sin(t) 0 sin(t) cos(t) 0 0 0 1
你如何检索正确的旋转角度?
如果在第一个元素上使用 acos,则只能得到 0 和 pi 之间的值。问题是如果t小于 0,你会怎么做(当然我不知道 t ;))?
t
大多数 C 系列编程语言中的函数atan2()同时采用 ay 和 x 值并计算它们之间比率的反正切,同时考虑这两个项的符号以给出正确的全圆角。
atan2()
atan2( sin(t), cos(t) )返回(大约)t在 (-pi,+pi] 范围内。
atan2( sin(t), cos(t) )
有无数个t可以满足t + 2*pi()*n整数的解 ( ) n。如果您使用acos(cos(t)),您将得到 0 和 pi 之间的结果,但如果您还检查asin(sin(t)),您将能够确定旋转是顺时针还是逆时针。
t + 2*pi()*n
n
acos(cos(t))
asin(sin(t))