Интерполяция между матрицами вращения - PullRequest
12 голосов
/ 07 апреля 2011

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

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

и

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

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

Ответы [ 2 ]

25 голосов
/ 07 апреля 2011

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

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

9 голосов
/ 08 марта 2012

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

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

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

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

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