Проблема з обертаннями полягає в тому, що більшість людей думають про це з точки зору кутів Ейлера, оскільки їх легко зрозуміти.
І все ж більшість людей забуває, що кути Ейлера - це три послідовні кути . Це означає, що обертання навколо першої осі зробить наступне обертання відносно першого вихідного обертання, отже, ви не можете самостійно обертати вектор навколо кожної з 3 осей, використовуючи кути Ейлера.
Це безпосередньо перекладається на матриці, коли ви множите дві матриці, ви можете вважати це множення як перетворення однієї матриці на простір іншої матриці.
Це означає, що це трапляється при будь-яких 3 послідовних обертаннях навіть при використанні кватерніонів.
Хочу наголосити на тому, що кватерніони не є рішенням для замкнутого замка. Насправді блокування повороту завжди буде, якщо ви представляли кути Ейлера за допомогою кватерніонів. Проблема не в представленні, проблема в 3 послідовних кроках.
Рішення?
Рішенням обертання вектора навколо 3-осі незалежно є поєднання в одну вісь і єдиний кут, таким чином ви зможете позбутися кроку, де вам потрібно зробити послідовне множення. Це ефективно перекладається на:
Моя матриця обертання відображає результат обертання навколо X і Y і Z.
а не Ейлерова інтерпретація
Моя матриця обертання представляє обертання навколо X, а потім Y та Z.
Для уточнення цього я цитую теорему обертання вікіпедії Ейлера:
Відповідно до теореми обертання Ейлера, будь-яке обертання або послідовність обертів жорсткого тіла або системи координат щодо нерухомої точки еквівалентні одному обертанню заданого кута θ щодо нерухомої осі (званої осі Ейлера), який проходить через нерухому точку. Вісь Ейлера зазвичай представлена одиничним вектором u →. Тому будь-яке обертання в трьох вимірах можна представити як комбінацію вектора u → і скалярного θ. Кватерніони дають простий спосіб кодування цього вісь-кута подання в чотирьох числах і застосувати відповідне обертання до вектора позиції, що представляє точку відносно початку в R3.
Зауважте, що множення 3 матриць завжди буде представляти 3 послідовних обертання.
Тепер, щоб поєднати обертання навколо 3 осі, вам потрібно отримати одну вісь і одиничні кути, які представляють обертання навколо X, Y, Z. Іншими словами, для позбавлення від послідовних обертів вам потрібно представити вісь / кут або кватерніон.
Зазвичай це робиться, починаючи з початкової орієнтації (орієнтацію можна розглядати як кут осі), зазвичай представлену як кватерніон або кут осі, а потім модифікуючи цю ординацію для представлення орієнтації вашого призначення. Наприклад, ви починаєте з кватертіона ідентичності, а потім обертаєтесь різницею, щоб досягти орієнтації на призначення. Таким чином ви не втрачаєте жодної міри свободи.