3x3 3d旋转矩阵逻辑的问题 - 连接不能按预期工作

时间:2011-04-03 21:49:07

标签: math 3d matrix geometry rotation

基本的话我需要一个简单而快速的算法来从C * X = M中找到解X,其中所有变量都是矩阵。更多解释如下。

我正在尝试计算一个特定的矩阵,但它并没有按预期工作:

Vz - negative Z-axis vector (or any other)
Vg - current gravity vector
Vc - zero reference vector (for gravity calibration)

M0 - current rotation matrix
C0 - reference rotation matrix
X0 - unknown rotation matrix to find
*t - transposed versions of above matrices

Upong runtime only Vg, M and C are known.

Rules:

1) Vz == Vg * M0
2) Vg == Vz * Mt
3) Vz == Vc * C0
4) Vc == Vz * Ct
5) Vz == Vx * X0
6) Vx == Vz * Xt
7) Vx == Vg * C0
8) M0 == C0 * X0 (wrong!!! see update notes below)
...
?) X0 = ?

我尝试使用这样的公式:

X0 = M0 * Ct

但是得到的矩阵并没有像预期的那样满足规则(5)和(6)。

这里有什么想法吗?

更新

我尝试的公式(X0 = M0 * Ct)是正确的。 问题是不正确的,因为(8)实际上是M0 = X0 * C0。

我认为它不起作用的问题是因为我试图计算Vx = Vg * C0 - 但实际上Vx = Vg * C0和Vg = Vx * Ct都不正确。

因此,我正在进行下一个任务 - 最好将其描述为一个新问题: - )

2 个答案:

答案 0 :(得分:0)

如果M0 = C0 * X0(规则8),则X0 = Ct * M0(您的公式X0 = M0 * Ct错误)。

如果此X0不满足其他规则,则您的规则集没有解决方案。

答案 1 :(得分:0)

你需要知道两件事:

  • 对于轮换,转置是反转
  • 矩阵乘法不通勤。

我们知道:

  M0 = C0 * X0  (8)

这些都是轮换。所以:

inverse (C0) = Ct

Ct预乘(8):

Ct * M0 = Ct * C0 * X0
        = X0  

因此我们有X0。