特征:矩阵到四元数和背面有不同的结果

时间:2017-05-10 14:53:10

标签: matrix eigen quaternions

我使用特征库将矩阵转换为四元数,但是当我将其中一个矩阵转换为四元数并将其烧回时,它变成了另一个矩阵,它是单位矩阵。我使用的旋转矩阵是从变换矩阵中分解出来的。

    Eigen::Matrix3f R3d = R.topLeftCorner<3,3>();
    *Rquat = R3d;

    R3d = (*Rquat).normalized().toRotationMatrix();

可能导致此问题的原因是什么? This is the matrix before change to quaternion

This is the matrix when I turn it back form the quaternion

2 个答案:

答案 0 :(得分:1)

刚检查了Eigen's matrix to quaternion conversion的实施情况。它基于Ken Shoemake的“Quaternion Calculus and Fast Animation”。

正如人们在分析源时所看到的那样,这假定矩阵确实是一个旋转矩阵(或接近一个)。事实上,所有具有M.trace()>0的对称矩阵都将产生(缩放的)同一性四元数。如果您对无效旋转矩阵有任何其他要求,则需要实现自己的转换方法。

答案 1 :(得分:1)

正如先前的答案和评论所建议的那样,单位四元数只能表示3D旋转矩阵。

要使矩阵成为旋转矩阵,它必须位于SO(3)the special orthogonal group中,其定义为:

so3

因此,您需要检查矩阵乘以其转置乘以是否等于同一性,以及行列式是否等于一(而不是减一,否则,它仅位于orthogonal group中,而不位于其子组中,即特殊正交)。

这时,用于从矩阵创建四元数的Eigen function不会检查传递的矩阵是否确实是旋转矩阵。如您所描述的,可能需要修复或警告,因为这可能导致意外的行为。

我发现自己处于同一位置,是因为我试图从变化的基矩阵(由三个基向量组成)形成四元数,并且仅在所述基是直接基时才起作用。如果不是直接的,则从此基础到standard basis的转换(反之亦然)不是旋转。