如何从旋转矩阵, 求旋转角(非欧拉角)
三个角a, b, c分别是围绕X, Y, Z轴旋转的角度, 易知
Mr = Ma * Mb * Mc;
Mr为最终旋转矩阵, 代码如下所示:
matrix4_t& Rotate(Real alpha, Real beta, Real gamma) {
Real sa, ca, sb, cb, sg, cg;
SinCos(alpha, sa, ca);
SinCos(beta, sb, cb);
SinCos(gamma, sg, cg);
m11 = cb * cg;
m12 = cb * sg;
m13 = -sb;
m21 = sa * sb * cg - ca * sg;
m22 = sa * sb * sg + ca * cg;
m23 = sa * cb;
m31 = ca * sb * cg + sa * sg;
m32 = ca * sb * sg - sa * cg;
m33 = ca * cb;
m41 = m42 = m43 = m14 = m24 = m34 = 0.0f;
m44 = 1.0f;
return *this;
}
问题: 现在已知旋转矩阵Mr, 如何求a, b, c的角度.
难点: 当sin(b)等于1或-1时, cos(b)等于0, 此时不能直接求出 cos(a) 和 cos(c).
弱弱问一句, 这三个角数学上称什么角?