Если я понимаю то, что вы говорите, вы видите, что текущий наклон рыскания и крена возвращаются, как если бы ось + y была вектором по умолчанию 'front', а ось + z была вектором 'up' по умолчанию.Вы хотели бы сделать преобразование координат так, чтобы ваши рыскание, тангаж и крен были рассчитаны с осью -z в качестве вектора по умолчанию 'front' и вектора + x в качестве вектора 'up' по умолчанию.
Во-первых, вам нужно вычислить текущие векторы фронта и восходящего направления от вашего рыскания, тангажа и крена в текущей конфигурации.Это можно сделать с помощью трехмерных матриц вращения: http://en.wikipedia.org/wiki/Rotation_matrix#Rotations_in_three_dimensions
Используйте угол поворота вокруг оси вращения вокруг оси z, угол поворота вокруг оси x и угол поворота вокруг оси y.Умножьте эти матрицы вместе, затем умножьте фронтальный вектор (0, 1, 0) и верхний вектор (0, 0, 1) на результат, чтобы получить новый фронтальный и верхний векторы.
Далее вам нужно будет вычислить новые углы рыскания, тангажа и крена.Yaw - это угол между фронтальным вектором, проецируемым в плоскость yz (установите значение x на 0), и вектором -z (0, 0, -1), pitch - это угол между фронтальным вектором, проецируемым на плоскость xz, и -вектор z, а roll - угол между вектором вверх, спроецированным на плоскость xy, и вектором + x (1, 0, 0).Если мы допустим, что Fx = компонент x переднего вектора, Fy будет компонентом y, и так далее, мы получим:
yaw = acos ( -z dot (0, Fy, Fz) ) / sqrt(Fy*Fy + Fz*Fz)
pitch = acos ( -z dot (Fx, 0, Fz) ) / sqrt(Fx*Fx + Fz*Fz)
roll = acos ( +x dot (Ux, Uy, 0 ) ) / sqrt(Ux*Ux + Uy*Uy)
Вы сможете сделать это для других векторов, если я выбралнеправильные.