我使用以下代码将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);
答案 0 :(得分:4)
你想要完成的事情并不像你想象的那么容易。关于欧拉角的调用有多种约定(x,y,z,alpha,beta,gamma,yaw,pitch,roll,heading,elevation,bank,...)以及它们需要应用的顺序
在某些职位上也存在一些含糊不清的问题,请参阅Gimbal Lock上的维基百科文章。
请阅读David Eberly撰写的Euler Angle Formulas文件。它非常有用,并且包含了许多用于各种约定的公式,如果你想在角落的情况下拥有稳定的公式,你可能应该根据它们建立代码。