как экстраполировать значения матрицы вращения?

Я использую chai3d api, который использует матрицу 3x3 с плавающей точкой для хранения ориентации объектов в моем виртуальном мире.

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

Я предсказываю положение объектов (например, куба opengl), отправляя значение положения и скорости.

Является ли угловая скорость для ориентации такой же, как скорость для положения?

если да, как мне рассчитать угловую скорость из этой матрицы 3x3 и использовать ее для экстраполяции?


person Community    schedule 10.12.2012    source источник


Ответы (1)


Матрица преобразования — это, по сути, представление новой системы координат в другой системе координат. Если вы добавите столбец, вы даже можете поместить в него перевод. Если вы помните свои расчеты и физику, то вы, возможно, помните

r = 1/2 a² t + v0 t + r0

v = d/dt r = a + v0

a = d/dt v

Чтобы перейти от скорости «v» к положению «r», вы должны интегрировать. В случае скаляров вы умножаете v на время. Но скалярное умножение на матрицу просто масштабирует ее, а не вращает. Так что вы должны сделать что-то еще. Ключевое слово, если вы хотите сделать это с помощью матриц, — степени матрицы, то есть вычисление степеней матрицы.

Скажем, у вас есть дифференциальное вращение, d/dt R, тогда вы бы интегрировали это, умножив соответствующую матрицу вращения бесконечно мало на себя, т.е. возьмем степень.

Но есть также математически более приятный способ сделать это. Что-то очень близкое к простому умножению на коэффициент. А именно: использование кватернионов вместо матриц для представления ориентации. Оказывается, простое масштабирование кватерниона равносильно простому умножению на описываемое им вращение.

Ключевые слова, которые вы должны найти в Google (поскольку StackOverflow — неподходящее место для введения одного из них во всю теорию кватернионов):

person datenwolf    schedule 10.12.2012