Вращайте 3D-точку Эйлера, используя кватернионы, чтобы избежать блокировки карданного подвеса. - PullRequest
0 голосов
/ 13 июня 2011

Во-первых, я много гуглил и проверял другие посты stackoverflow по этому поводу, но не могу получить рабочий ответ или фрагмент рабочего кода.Математика - не моя сила.

Мне нужна процедура, которая берет точку камеры (CX, CY, CZ) и поворачивает ее вокруг точки обзора (LX, LY, LZ) на три угла поворота (RX), RY RZ).Использование вращений Эйлера в некоторых случаях приводит к блокировке карданного подвеса, чего мне следует избегать.Итак, я слышал об использовании кватернионов.

Я нашел это для преобразования вращений в кватернион http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToQuaternion/index.htm

и для преобразования из кватернионов обратно в вращения Эйлера XYZ http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/index.htm

Кажется, они работают нормально, но мне нужно знать, как использовать кватернион для вращения CX, CY, CZ вокруг LX, LY, LZ, а затем вернуть новый CX, CY, CZ без проблем с блокировкой карданного подвеса.

В этом так много всего, что я уверен, что хорошее объяснение и фрагмент кода помогут не только мне, но и многим другим в будущем.

Поэтому, пожалуйста, помогите, если сможете.Большое спасибо.

1 Ответ

2 голосов
/ 17 июня 2011

Короткий ответ, если ваш кватернион Q и новая точка камеры: C ':

C' = Q*(C-L)*Q^-1 + L

, где точки увеличиваются с Cw = 0, а умножение и обратное соответствуют правилам кватернионов.

В частности, пусть D = C - L . Тогда пусть F = Q * D :

Fw = Qw*0  - Qx*Dx - Qy*Dy - Qz*Dz
Fx = Qw*Dx + Qx*0  + Qy*Dz - Qz*Dy
Fy = Qw*Dy - Qx*Dz + Qy*0  + Qz*Dx
Fz = Qw*Dz + Qx*Dy - Qy*Dx + Qz*0

Наконец, мы получаем C '= F * Q ^ -1 + L :

Cw' = 0
Cx' = Fw*Qx - Fx*Qw + Fy*Qz - Fz*Qy + Lx
Cy' = Fw*Qy - Fx*Qz - Fy*Qw + Fz*Qx + Ly
Cz' = Fw*Qz + Fx*Qy - Fy*Qx - Fz*Qw + Lz

Однако имейте в виду, что если вы создаете кватернион из представления Эйлера, вы все равно получите блокировку карданного подвеса. Блокировка карданного подвеса является свойством представления Эйлера, и кватернион будет просто представлять то же преобразование. Чтобы избавиться от блокировки карданного подвеса, вам нужно вообще избегать представления Эйлера, если только я не пойму, как вы его используете.

...