2014-02-02 5 views
4

Я понимаю, что точка (или внутреннее) произведение двух кватернионов - это угол между вращениями (включая поворот оси). Это делает точечный продукт равным углу между двумя точками на гиперсфере кватерниона.
Я не могу, однако, найти, как на самом деле вычислить продукт точки.dot произведение двух кватернионных оборотов

Любая помощь будет оценена!

текущий код:

public static float dot(Quaternion left, Quaternion right){ 
    float angle; 

    //compute 

    return angle; 
} 

Defined являются Quaternion.w, Quaternion.x, Quaternion.y и Quaternion.z.

Примечание: Можно предположить, что кватернионы нормированы.

ответ

9

Скалярное произведение для кватернионов просто стандартное евклидово скалярного произведения в 4D:

dot = left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w 

Тогда угол ваши ищут является arccos продукта точки (обратите внимание, что скалярное произведение не угол): acos(dot).

Однако, если вы ищете относительное вращение между двумя кватернионами, скажем, от q1 к q2, вы должны вычислить относительный кватернион q = q1^-1 * q2, а затем найти поворот, связанный с q.

+0

Это замечательно, спасибо! – Kent

0

Просто ПРИМЕЧАНИЕ: acos (точка) очень нестабильна с цифровой точки зрения.

как было сказано Previos, д = q1^-1 * д2 и чем угол = 2 * atan2 (q.vec.length(), QW)

0

Если это будет 2 х ACOS (точка), чтобы получить угол между кватернионами.

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