2012-06-10 64 views
1

这是我的坐标轴。我不知道该怎么称呼它。 (是否ZXY?) (这是摄像头看到的)从旋转矩阵Y旋转

我想知道绕Y轴的平面内旋转。目前,它是0度左右Y.

这里是我做的,

Matrix33 orientmatrix = body->getGlobalOrientation(); 
return Degree(-asin(orientmatrix[2][0])); 

这个返回不正确的角度,逆时针: 0..45..90..45..0 ..- 45 ..- 90 ..- 45..0

它应该是: 0 ... 45..90..135..180 ..- 45 ..- 90 ..- 135..0

我在做什么错?

谢谢。

(这是OGRE,代码为C++)

回答

3

你在做什么错的是你正在使用asin。它返回-pi/2到+ pi/2之间的值,或-90度到+90度之间的值。

如果您想要一个跨越360度的值,您需要使用atan2。假设你的方向真的是一个关于y的旋转,你可以使用

Degree(atan2(orientmatrix[0][2], orientmatrix[0][0]))