Существует ли существующий алгоритм преобразования кватернионного представления вращения в представление угла Эйлера? Порядок вращения для представления Эйлера известен и может быть любой из шести перестановок (т.е. Xyz, xzy, yxz, yzx, zxy, zyx). Я видел алгоритмы для фиксированного порядка вращения (как правило, заголовок NASA, банк, соглашение о роуте), но не для произвольного порядка вращения.
Кроме того, поскольку существует несколько представлений угла Эйлера с одной ориентацией, этот результат будет неоднозначным. Это приемлемо (поскольку ориентация по-прежнему действительна, это может быть не тот, который пользователь ожидает увидеть), однако было бы еще лучше, если бы был алгоритм, который принимал ограничения на вращение (т.е. Количество степеней свободы и ограничения на каждую степень свободы) и дал "наиболее разумное" представление Эйлера с учетом этих ограничений.
У меня такое ощущение, что эта проблема (или что-то подобное) может существовать в доменах ИК или твердого тела.
Решено: Я только понял, что может быть неясно, что я решил эту проблему, следуя алгоритмам Ken Shoemake из Graphics Gems. В то время я отвечал на свой вопрос, но мне кажется, что не ясно, что я сделал это. Подробнее см. Ответ ниже.
Просто чтобы уточнить - я знаю, как преобразовать из кватерниона в так называемое представление Tait-Bryan - то, что я называл конвенции НАСА. Это порядок вращения (если предположить, что ось "Z" поднята) zxy. Мне нужен алгоритм для всех порядков вращения.
Возможно, решение состоит в том, чтобы принять преобразование порядка zxy и извлечь из него пять других преобразований для других порядков вращения. Наверное, я надеялся, что существует более "всеобъемлющее" решение. В любом случае, я удивлен, что я не смог найти существующие решения там.
Кроме того, и это, возможно, должно быть отдельным вопросом вообще, любое преобразование (при условии, конечно, порядок вращения, конечно) собирается выбрать одно представление Эйлера, но на самом деле много. Например, с учетом порядка вращения yxz два представления (0,0,180) и (180,180,0) эквивалентны (и будут давать тот же кватернион). Есть ли способ ограничить решение, используя ограничения на степени свободы? Как вы это делаете в ИК и динамике твердого тела? то есть в приведенном выше примере, если бы была только одна степень свободы относительно оси Z, тогда второе представление можно пренебречь.
Я отследил одну статью, которая могла бы быть алгоритмом в этом pdf, но я должен признаться, что мне очень трудно найти логику и математику следовать. Конечно, есть другие решения? Действительно ли случайный порядок вращения настолько редок? Несомненно, каждый крупный 3D-пакет, который позволяет скелетную анимацию вместе с интерполяцией кватернионов (т.е. Maya, Max, Blender и т.д.), Должен решить именно эту проблему?