Матрица преобразования с потерями -> Quaternion -> Matrix - PullRequest
4 голосов
/ 06 июня 2011

У меня есть поле, определяемое 8 баллами.Из этих точек я вычисляю оси и создаю матрицу вращения следующим образом:

axis[0], axis[1], axis[2]
mat = 
{
  axis[0].x axis[1].x axis[2].x 0
  axis[0].y axis[1].y axis[2].y 0
  axis[0].z axis[1].z axis[2].z 0
  0         0         0         1
}

У меня есть определенная матрица вращения:

{
  -1  0  0  0
   0  0  1  0 
   0 -1  0  0
   0  0  0  1
}

Насколько я знаю, это действительная матрица вращения,Его инверсия равна его транспозиции.

Теперь я хотел бы сохранить эту матрицу как кватернион.Но позже мне понадобится воссоздать матрицу вращения из этого кватерниона.Я считаю, что преобразование из матрицы в кватернион и обратно в матрицу должно быть тождественным преобразованием, и я должен получить ту же матрицу, что и у меня в начале (возможно, с очень небольшими числовыми ошибками).

Но, похоже, это не такбыть так.И SlimDX (C #), и моя собственная математическая библиотека (C ++) возвращают недопустимую матрицу.

Во-первых, я получаю кватернион:

C#:  0, 0, 0.70710676908493, 0
C++: 0, -0.707107, 0, 0

И матрица, созданная из этого кватерниона:

C #:

0 0 0 0
0 0 0 0
0 0 1 0
0 0 0 1

C ++:

0 0 0 0 
0 1 0 0
0 0 0 0
0 0 0 1

Почему это не так?

Я также пробовал это: http://cache -www.intel.com / cd / 00/00/29/37 / 293748_293748.pdf но это также дало мне плохие результаты.

Ответы [ 2 ]

7 голосов
/ 06 июня 2011

Матрица, которую вы дали, не является матрицей вращения, это матрица отражения, потому что ее детерминант равен -1.См. определение в Википедии.Вы можете сказать, что что-то не так, потому что вы должны получить кватернион, а тот, который вы получаете, имеет длину 1 / sqrt (2).

0 голосов
/ 06 июня 2011

Попробуйте использовать матрицу 4х4.Я не эксперт по математике, но я никогда не использовал матрицы 3х3 при работе с трехмерной графикой.Я считаю, что дополнительное измерение предназначено для нормализации или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...