Quaternion 3 оси вращения

Небольшая помощь здесь. Я получаю 1 вращение на ось от аппаратного гироскопа, так что всего 3 поворота по 3 осям (x, y, z). Когда я использую вращение на основе матрицы, я получаю странные вращения, возможно, из-за порядка умножения (RotX * RotY * RotZ <> RotY * RotX * RotZ), я также пробовал MatrixYawPitchRoll, но появляются те же эффекты. Таким образом, я пришел к выводу, что я должен использовать кватернионы, но как можно быстрее я должен создать 3 кватерниона, по одному на оборот, но когда я объединяю их с умножением, я получаю те же эффекты, что и поворот на основе матрицы … Так что кто-то может сказать, пожалуйста Как правильно использовать 3 поворота, чтобы создавать и комбинировать кватернионы без появления предыдущих эффектов умножения?

Постскриптум D3DXQuaternionRotationYawPitchRoll по-прежнему испытывает те же эффекты, что и вращение на основе матрицы.

1

Решение

Кватернионы — не волшебная мазь, которая смывает проблемы вращения. Все кватернионы — это дешевый способ представления определенной ориентации и преобразования ориентации.

Ваша проблема в том, что вы не представляете свою ориентацию как кватерион; Вы представляете это как 3 угла. И это то, что представление это вызывает проблемы с вращением.

Вы должны прекратить использовать углы. Представьте ориентацию объекта как кватернион. Если вы хотите отрегулировать свою ориентацию, создайте кватернион из угла / оси регулировки, а затем умножьте его на ориентацию объекта. Повторно нормализуйте кватернион, и все готово.

2

Другие решения

Я вижу 2 основных источника проблем.

  1. Ваше обращение из Ангелов Эйлера нарушено.
  2. Вы используете неверную схему Euler Angle. Существует 24 типа схем ангелов Эйлера
    http://en.wikipedia.org/wiki/Euler_angles

Просто схема Эйлера Угол — это порядок вращений вокруг оси XYZ, ZYX, ZXZ …

Все преобразования в / из матрицы / кватерниона можно найти в исходном коде отличной статьи Кена Шумейка, 1993.

http://tog.acm.org/resources/GraphicsGems/gemsiv/euler_angle/

0

По вопросам рекламы [email protected]