Интерполирование между matrixми вращения

У меня есть 2 матрицы вращения (давайте назовем их A и B), где:

A = 1 0 0 0 0 -1 0 1 0 

а также

 B = -1 0 0 0 0 -1 0 -1 0 

Это в основном просто поворот, где камера вращается вокруг, чтобы заглянуть за себя. Очевидно, я не могу просто интерполировать значения в matrixх напрямую, потому что это выглядит странно. Я попытался преобразовать матрицы в углы Эйлера, которые дают 2 набора углов X, Y, Z и пытаются определить, какие углы использовать на основе минимального расстояния между каждым компонентом угла X, Y, Z. Это определенно приводит к типу вращения, который я хочу, но я не могу придумать подходящий способ определить, какие углы интерполировать между ними, потому что иногда наборы углов, которые приводят к наименьшей ошибке, приводят к вращению вокруг неправильной оси / осей. Я также пробовал кватернионы, но это по сути дало мне тот же результат. Может кто-то указать мне верное направление?

Используйте кватернионы (SLERP). Для интерполяции не подходят ни матрицы вращения, ни углы Эйлера.

См. Здесь 45:05 (Дэвид Сакс, Google Tech Talk) .

Мое личное мнение заключается в том, что использование кватернионов для такого типа вещей имеет больше смысла. Тем не менее, вы можете сделать это без использования кватернионов.

Следует заметить, что «разностная» matrix, T = A.tranpose() * B Матрица, которая принимает «ориентацию» A в «ориентацию» B может быть рассчитана с помощью T = A.tranpose() * B (учитывая, что вы умножаетесь справа) , Когда у вас есть matrix поворота T , вы можете преобразовать в представление Axis-Angle (см., Например, http://en.wikipedia.org/wiki/Axis-angle_representation ).

Наконец, поскольку вы знаете ось вращения, которая принимает от A до B , вы можете линейно интерполировать углы от нуля до угла, предварительно вычисленного из T

Это эквивалентно использованию SLERP.

  • Как искать строку в массиве ячеек в MATLAB?
  • Зацикливание по спирали
  • Interesting Posts
    Давайте будем гением компьютера.