Как интерполировать вращения?

У меня есть два вектора, описывающие вращения; вращение запуска A и целевое вращение B. Как я лучше всего пошел бы об интерполяции фактором F для приближения к B?

Используя простой lerp на сбоях векторов для работы, когда больше чем один размер должен быть интерполирован (т.е. производит нежелательные вращения). Возможно, создание кватернионов от векторов вращения и использование slerp являются способом пойти. Но как, затем, я мог извлечь вектор, описывающий новое вращение от получающегося кватерниона?

Заранее спасибо.

9
задан uhuu 21 May 2010 в 03:45
поделиться

3 ответа

Поскольку я, кажется, не понимаю вашего вопроса, вот небольшая реализация SLERP на Python с использованием numpy. Результаты я построил с помощью matplotlib (v.99 для Axes3D). Я не знаю, можете ли вы использовать python, но похоже ли это на вашу реализацию SLERP? Мне кажется, что это дает прекрасные результаты ...

from numpy import *
from numpy.linalg import norm

def slerp(p0, p1, t):
        omega = arccos(dot(p0/norm(p0), p1/norm(p1)))
        so = sin(omega)
        return sin((1.0-t)*omega) / so * p0 + sin(t*omega)/so * p1


# test code
if __name__ == '__main__':
    pA = array([-2.0, 0.0, 2.0])
    pB = array([0.0, 2.0, -2.0])

    ps = array([slerp(pA, pB, t) for t in arange(0.0, 1.0, 0.01)])

    from pylab import *
    from mpl_toolkits.mplot3d import Axes3D
    f = figure()
    ax = Axes3D(f)
    ax.plot3D(ps[:,0], ps[:,1], ps[:,2], '.')
    show()
9
ответ дан 4 December 2019 в 13:00
поделиться

Если вы решили использовать кватернионы (которые будут очень хорошо скользить), смотрите мой ответ здесь о ресурсах для реализации кватернионов: Вращение в OpenGL относительно области просмотра

Вы можете найти множество примеров в ссылках в этом посте.

1
ответ дан 4 December 2019 в 13:00
поделиться

Ну, ваш подход slerp будет работать и, вероятно, является наиболее эффективным с вычислительной точки зрения (хотя он немного сложен для понимания). Чтобы вернуться от кватернионов к вектору, вам нужно использовать набор формул, которые вы можете найти здесь.

Также есть немного соответствующего кода здесь, хотя я не знаю, соответствует ли он тому, как у вас представлены данные.

2
ответ дан 4 December 2019 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: