Кватернионы, возможно, являются подходящим выбором для представления вращения объекта внутри. Они просты и эффективны для интерполяции и однозначно представляют единую ориентацию.
Однако представление кватернионов в пользовательском интерфейсе, как правило, неуместно - углы Эйлера, как правило, гораздо более знакомы пользователям, а их значения немного более интуитивны и предсказуемы.
Углы Эйлера страдают от сложности на уровне кода - они требуют сохранения порядка вращения, а составление практической ориентации (будь то матрица или кватернион) с использованием этого порядка и связанных углов является по меньшей мере громоздким.
Надежные интерполяции наиболее удобно выполнять с использованием кватернионного представления - так значит ли это, что мы должны постоянно преобразовывать представление Эйлера в представление кватерниона? Это возможно с точки зрения производительности?
Можем ли мы сохранить ориентации как кватернионы и преобразовать их только для отображения пользователю? Это может быть невозможно, поскольку для любой данной ориентации существует ровно одно кватернионное представление, но много представлений Эйлера. Как «выбрать» представление Эйлера, которое соответствует тому, которое первоначально определило эту ориентацию? Это кажется невыполнимой задачей - мы фактически потеряли информацию при преобразовании в кватернион.
Можем ли мы сохранить как углы Эйлера, а затем при необходимости преобразовать в кватернионы? Это, вероятно, не масштабируется - преобразование из угла Эйлера в кватернион, интерполяция, а затем обратное преобразование, вероятно, будет относительно дорогим кодом.
Можем ли мы просто сохранить оба представления и использовать наиболее подходящие для любой конкретной ситуации? Большие затраты с точки зрения памяти (представьте анимационные кривые для скелета с шестьюдесятью костями) и поддержание синхронизации этих значений могут быть дорогими или, по крайней мере, громоздкими.
Кто-нибудь видел, использовал или хотя бы нашел какое-нибудь умное решение этой проблемы? Конечно, три варианта выше не только один? Существуют ли какие-либо другие проблемные области, подобные этому, которые были решены ?