2017-02-03 13 views
0

я в настоящее время пытается вывести полную матрицу вращения R на основе двух пар 3D векторов (V1, V1 т) и (V2, V2 т) таким образом, чтоВыведение матрица поворота 3D из двух трансформировали 3D векторов

  • V1 т = R * V1
  • V2 т = R * V2
  • V1 и V2 выбраны ортогональными друг другу.

используются две пары векторов, так как одной пары векторов (V1 и его преобразованный вектор, V1 т) не приносит достаточно информации, чтобы построить матрицу поворота R. Хороший пример для иллюстрации того, что является например, V1, лежащей на оси вращения R.

идея заключается в том, чтобы построить два частичного поворота матриц R1 и R2, чтобы получить окончательную матрицу Р.

реализация использует GLM и R1 и R2 вычислено следующим образом:

R1 = math::mat3_cast(math::rotation(V1, V1t)); 
R2 = math::mat3_cast(math::rotation(V2, V2t)); 

Мое предположение заключается в том, что перед вычислением R вращение вдоль оси V1 должно быть изолировано от R2, давая R2 '.

R будет тогда R1 * R2 '.

Мои вопросы

  • Во-первых, это жизнеспособный вывести матрицу вращения из двух пар трансформированных 3D векторов? (Два исходных вектора V1 и V2 берутся как ортогональные друг другу)
  • Как извлечь поворот вдоль произвольной оси из матрицы вращения?

ответ

0

Вы на правильном пути, но я бы немного изменил его.

Может попробовать так:

  • Compute R1 из (V1, V1t)
  • Поворот V2 с R1, результатом является V2R
  • Вычислить R2, из (V2R, v2t)
  • Объединить R1 и R2 для получения окончательного вращения

Это должно быть проще, чем пытаться изолировать вращение вдоль некоторой оси.

Смежные вопросы