Android SensorManager.java getOrientation и алгоритм getRotationMatrix - PullRequest
5 голосов
/ 29 марта 2011

Я пытаюсь понять, как getRotationMatrix() и getOrientation() работают точно.

До сих пор я знал, что в функции getRotationMatrix() он перекрестно производит вектор гравитации с магнитным вектором, чтобы получить новый вектор, указывающий на восток. И затем, он снова создает перекрестный вектор Восток с вектором гравитации, чтобы получить вектор, указывающий на магнитный север. В соответствии с этой статьей сказано, что теперь у нас есть три ортогональных вектора, и мы можем сформировать матрицу вращения.

Вот мой первый вопрос : Почему мы должны снова произвести перекрестное произведение вектора Востока с вектором гравитации, чтобы получить вектор, указывающий на магнитный север? Разве оригинальный магнитный вектор не указывает на магнитный север? В чем разница между новым вектором и исходным магнитным вектором?

Говоря о getOrientation(), вот мой второй вопрос : как получаются азимут, крен и наклон? Есть какие-нибудь уравнения или формулы для объяснения?

Вы можете перейти на этот веб-сайт , чтобы увидеть код

очень признателен за ваше внимание. Большое спасибо!

1 Ответ

1 голос
/ 29 марта 2011

Первый ответ: магнитный вектор указывает (магнитный) на север и, возможно, также немного вверх или вниз.Цель второго перекрестного произведения - получить вектор в горизонтальной плоскости, указывающий (магнитный) на север.

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

tan (азимут) = M y / H y
sin (шаг) = -A y
tan (roll) = -A z / A x

(достаточно ли этого ответа, зависит от того, насколько вы удобны с тригонометрией и визуализацией поворотов впространство.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...