Матрица вращения в углы Эйлера
Я использую следующий код для преобразования матрицы вращения 3X3 в углы:
(_r = double [9])
double angleZ=atan2(_r[3], _r[4])* (float) (180.0 / CV_PI);
double angleX=180-asin(-1*_r[5])* (float) (180.0 / CV_PI);
double angleY=180-atan2(_r[2],_r[8])* (float) (180.0 / CV_PI);
вот маленький помощник
_r[0] _r[1] _r[2]
_r[3] _r[4] _r[5]
_r[6] _r[7] _r[8]
Есть ли в этом смысл ? потому что углы кажутся слишком ... взаимозависимыми? x y z все реагируют на изменение одной позы ...
матрица вращения получена из функции opencv cvPOSIT, так что интересующие вас объекты могут быть неправильными и приводить в замешательство ...
но почему-то я думаю, что я просто делаю преобразование неправильно :)
Я применяю углы в opengl к кубу:
glRotatef(angleX,1.0f,0.0f,0.0f);
glRotatef(angleY,0.0f,1.0f,0.0f);
glRotatef(angleZ,0.0f,0.0f,1.0f);