Alerr
Привет всем, давненько сюда не заглядывал)!
Есть вращения Rot1 и Rot2.
Нужо найти вращение (кватернион), который бы удовлетворял:
Rot2 = Rot1 * searchRot;
searchRot - это то что нужно найти.

Второе важное условие задачи: нужно разбить searchRot на вращения по разным осям, так чтобы:
searchRot = searchRot_x * searchRot_y * searchRot_z;

searchRot нашел достаточно быстро:
Rot1 * searchRot = Rot2;
Rot1^(-1) * Rot1 * searchRot = Rot1^(-1) * Rot2;
searchRot = Rot1^(-1) * Rot2;

А вот как разбить вращение на разные составляющие по трем осям - вообще не знаю, уже 2 дня безрезультатно бьюсь с этим.
Пробовал получить угол (ang = ACos(searchRot.w) * 2), исходя из:
q.w = Cos(rotate_angle / 2);// <
q.x = rotate_vector.x * Sin(rotate_angle / 2);
q.y = rotate_vector.y * Sin(rotate_angle / 2);
q.z = rotate_vector.z * Sin(rotate_angle / 2);
Чтобы нати вращения вдоль какой-то оси пробовал (хотя вообще не уверен в верности того что делаю) ang умножать на "вклад" оси во вращение (q должен быть нормализован):
ang = ang * q.x (например вдоль ox).

Пока получаю невесть что, но не то что нужно.
Подскажите как разбить кватернион на вращения вдоль разных осей.

@темы: Высшая алгебра, Высшая геометрия, Комплексные числа