旋转矩阵到欧拉角

时间:2014-08-25 15:36:14

标签: c++ opencv matrix 3d rotational-matrices

我使用以下代码将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);

1 个答案:

答案 0 :(得分:4)

你想要完成的事情并不像你想象的那么容易。关于欧拉角的调用有多种约定(x,y,z,alpha,beta,gamma,yaw,pitch,roll,heading,elevation,bank,...)以及它们需要应用的顺序

在某些职位上也存在一些含糊不清的问题,请参阅Gimbal Lock上的维基百科文章。

请阅读David Eberly撰写的Euler Angle Formulas文件。它非常有用,并且包含了许多用于各种约定的公式,如果你想在角落的情况下拥有稳定的公式,你可能应该根据它们建立代码。

相关问题