我使用以下代码将3X3旋转矩阵转换为 Angular :
(_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);
这是一个小 helper
_r[0] _r[1] _r[2]
_r[3] _r[4] _r[5]
_r[6] _r[7] _r[8]
这有意义吗 ?导致 Angular 似乎太...相互依存? x y z都对单个姿势变化使用react...
旋转矩阵是从opencv cvPOSIT函数接收的,因此关注点可能是错误的,并产生了这种令人困惑的效果...
但以某种方式我认为我只是在做转换错误:)
我正在将opengl中的 Angular 应用于多维数据集:
glRotatef(angleX,1.0f,0.0f,0.0f);
glRotatef(angleY,0.0f,1.0f,0.0f);
glRotatef(angleZ,0.0f,0.0f,1.0f);
最佳答案
您想要实现的目标并不像您想象的那么容易。关于欧拉角的称谓有多种约定(x,y,z,α,β,γ,偏航角,俯仰,倾角,滚动,航向,高程,倾斜等)以及需要应用的顺序。
某些位置的歧义性也存在一些问题,请参阅Wikpedia上有关Gimbal Lock的文章。
请阅读David Eberly的Euler Angle Formulas文档。它非常有用,并且包含许多用于各种约定的公式,并且即使您在极端情况下也希望拥有稳定的公式,则可能应该基于它们编写代码。
关于c++ - 旋转矩阵到欧拉角,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25489462/