La conversion d'une matrice de 3x3 à Euler/Tait Bryan angles (pitch yaw roll)

J'ai le Razer Hydra SDK ici, et j'ai envie de transformer la matrice de rotation-je obtenir du matériel en tangage, lacet et roulis.

Les états de documentation:

rot_mat - A 3x3 matrix describing the rotation of the controller.

Mon code est actuellement:

roll = atan2(rot_mat[2][0], rot_mat[2][1]);
pitch = acos(rot_mat[2][2]);
yaw = -atan2(rot_mat[0][2], rot_mat[1][2]);

Pourtant, cela semble me donner de mauvais résultats.

Serait quelqu'un sait comment je peux traduire facilement, et ce que je fais de mal?

OriginalL'auteur Rob Quist | 2013-08-25