Перевести местное вращение кватернионов в глобальное - PullRequest
1 голос
/ 17 февраля 2010

Мне нужен способ получить углы Эйлера для поворота в глобальной системе координат из локальной системы. Я использую c #, wpf 3d и гироскоп. У меня есть шар на экране, который должен двигаться так же, как гироскоп. Поскольку гироскоп отправляет движение относительно себя, мне нужно использовать кватернионы, чтобы сохранить состояние объекта и обновить его, но я застрял. Если я сделаю следующее:

                var qu=eulerToQ(Gyro.X,Gyro.Y,Gyro.Z);
                GlobalQu = Quaternion.Multiply(qu, GlobalQu);

ЭТО вращается правильно на одной оси. Когда я вращаюсь на A в одном направлении, а затем на B в другом, вращение объекта и гироскопа больше не в одном направлении, потому что вышеописанное работает для абсолютных вращений (относительно мира).

Например:

                    var qu=eulerToQ(KeyboardValue1,KeyboardValue2,KeyboardValue3);
                    GlobalQu = qu;

Это работает, потому что я увеличиваю значения крена, шага, рыскания, т.е. значения клавиатуры через клавиатуру всегда на глобальной оси. Гироскоп отправляет вращения по локальной оси.

Смена порядка вращения кватернионов не помогает

                    var qu=eulerToQ(Giro.X,Giro.Y,Giro.Z);
                    GlobalQu = Quaternion.Multiply(GlobalQu,qu);

Ответы [ 2 ]

3 голосов
/ 20 февраля 2010

Это на самом деле правильный путь. Если вы умножите globalQuaternion * newQuaternion, вы получите глобальное вращение, а newQuaternion * globalQuaternion - локальное вращение У меня просто была ошибка в создании моего кватерниона.

2 голосов
/ 06 марта 2010

Вы говорите, у вас есть гироскоп. Это физический гироскоп? Гироскоп сам по себе может генерировать только информацию об угловой скорости. Прилагается ли к нему электроника, которая производит углы, а не угловые скорости? Существует двенадцать возможных последовательностей поворота угла Эйлера; у каждого разное математическое преобразование в кватернион. У вас есть только один шанс из двенадцати, что порядок углов, исходящих от вашего гироскопа, совпадает с порядком, в котором работает ваша система eulertoQ. Вот Ссылка на белую книгу эйлера и кватерниона, которую я написал несколько лет назад.

...