проблема с логикой трехмерных матриц вращения 3x3 - конкатенация не работает должным образом - PullRequest
0 голосов
/ 04 апреля 2011

В основных словах мне нужен простой и быстрый алгоритм, чтобы найти решение X из C * X = M, где все переменные являются матрицами. Больше объяснений ниже.

Я пытаюсь вычислить одну конкретную матрицу, но она не работает должным образом:

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), как ожидалось.

Есть идеи, что здесь не так?

UPDATE:

Формула, которую я пробовал (X0 = M0 * Ct), верна. Вопрос был неверным, так как (8) на самом деле M0 = X0 * C0.

Проблема, почему я думал, что это не работает, заключалась в том, что я пытался вычислить Vx = Vg * C0, но на самом деле ни Vx = Vg * C0, ни Vg = Vx * Ct не являются правильными.

Итак, я перехожу к следующему заданию, которое лучше описать как новый вопрос: -)

Ответы [ 2 ]

0 голосов
/ 04 апреля 2011

Вам нужно знать две вещи:

  • Для вращений, транспозиции - это инверсии
  • Матричное умножение не коммутирует.

Мы знаем:

  M0 = C0 * X0  (8)

и это повороты. Итак:

inverse (C0) = Ct

Предварительно умножить (8) на Ct:

Ct * M0 = Ct * C0 * X0
        = X0  

И, следовательно, у нас есть X0.

0 голосов
/ 04 апреля 2011

Если M0 = C0 * X0 (правило 8), то X0 = Ct * M0 (ваша формула X0 = M0 * Ct неверна).

Если это X0 также не удовлетворяет другим правилам, то ваш набор правил не имеет решения.

...