Я экспериментирую с использованием векторов оси-угла для поворотов в своем игровом движке для хобби. Это трехкомпонентный вектор вдоль оси вращения с длиной поворота в радианах. Мне они нравятся, потому что:
- В отличие от quats или матриц вращения, я действительно могу видеть числа и визуализировать вращение в уме.
- Они занимают немного меньше памяти, чем кватернионы или матрицы.
- Я могу представлять значения за пределами диапазона от -Pi до Pi (это важно, если я сохраняю угловую скорость)
Однако у меня есть жесткий цикл, который обновляет вращение всех моих объектов (десятки тысяч) в зависимости от их угловой скорости. В настоящее время единственный известный мне способ объединить два вектора оси вращения — преобразовать их в кватернионы, умножить их, а затем преобразовать результат обратно в ось/угол. С помощью профилирования я определил это как узкое место. Кто-нибудь знает более простой подход?
[phi,psi,theta]
может представлятьRX(phi)*RY(psi)*RZ(theta)
. Если это так, вам нужно найти способ построить матрицу вращения 3x3 и извлечь из нее ось-угол. - person John Alexiou   schedule 01.12.2010