Для ясности в обозначениях позвольте мне определить единичные векторы
E1 = (1,0,0)
E2 = (0,1,0)
E3 = (0,0,1)
Учитывая матрицу вращения R, цель состоит в том, чтобы разложить ее на две матрицы вращения, поворачивая угол "a" вокруг оси E2 и угол "b" вокруг оси E3:
R = exp(a E2) exp(b E3)
Умножение обеих сторон на E3
R E3 = exp(a E2) exp(b E3) E3
Получаем:
W = exp(a E2) E3
Где W - вектор E3, повернутый на R: W = R E3
a = atan2( W • E1, W • E3)
Где (•) - скалярное произведение.
Теперь, взяв транспонирование R, мы получим:
R^T = exp(b E3)^T exp(a E2)^T
Умножение обеих сторон на E2:
R^T E2 = exp(b E3)^T exp(a E2)^T E2
R^T E2 = exp(-b E3) exp(-a E2) E2
S = exp(-b E3) E2
где S - вектор E2, повернутый на R ^ T: S = R ^ T E2
b = - atan2( S • E1, S • E2)
Я только что вывел эти уравнения, так что это не проверено, и может быть какая-то ошибка. Прими это как есть.