Как получить угол телефона относительно магнитного поля Земли?

Я планировал вычислить угол, под которым телефон находится относительно магнитного поля Земли. Для этого я планировал использовать Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR. В векторе геомагнитного вращения поясняется, что event.values возвращают те же значения, что и в векторе вращения которые есть,

  • х * грех (θ/2),
  • у * грех (θ/2),
  • г * грех (θ/2),
  • потому что (θ / 2)

Что такое значения x, y, z в приведенных выше значениях? Используя эти значения, могу ли я рассчитать углы между осью X телефона и осью X Земли, осью Y телефона и осью Y Земли, а также осью Z телефона и осью Z Земли?

PS: θ описывается как угол θ вокруг оси (x, y или z)

Оси X, Y и Z телефонаОси X, Y и Z Земли


person SysClaude    schedule 13.11.2014    source источник


Ответы (2)


Для векторов вращения:

Значение x — это «шаг» телефона: при 0 он обращен лицом вверх, при -1, 1 он обращен к земле. Это вращается вокруг оси x на диаграмме справа выше.

Значение y — это «рыскание» телефона: при уменьшении рыскания происходит вращение против часовой стрелки, при увеличении — по часовой стрелке вокруг оси y.

Значение z — это «прокрутка» телефона: увеличение или уменьшение прокрутки вращает телефон вокруг оси z.

Каждая из координат имеет значение от -1 до 1, потому что они являются тригонометрическими функциями. В документации Android указано, что они x,y ,z равны последним трем компонентам единичного кватерниона (cos(θ/2), xsin(θ/2), ysin(θ/2), z*sin(θ /2)). Использование кватернионов выходит за рамки моих знаний, но вот учебник, если вы хотите узнать, как они работают. http://3dgep.com/understanding-quaternions/

Способ, которым я понял, как понять эти значения, пришел из игры с шагом/рысканием/креном телефона в этом API для имитации движения на телефонах Android https://code.google.com/p/openintents./wiki/SensorSimulator

Например, телефон с отклонением от курса 0, шагом 0 и вращением 0 лежит горизонтально, экраном вверх (к небу), а верхняя часть телефона направлена ​​на север (снова поиграйте с SensorSimulator, и вы Я буду лучше представлять это, это действительно трудно объяснить словами)

Если вы хотите иметь простой способ вычисления ссылки на систему координат Земли, вызовите getRotationMatrix() в вашем SensorManager: документ для Android

Вот демонстрация программы, использующей векторы поворота: https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.java

person Keith Aylwin    schedule 16.11.2014

Получите текущий угол телефона, затем получите угол или свойство сравнения и вычтите их друг из друга.

person StupidHackerGuy    schedule 13.11.2014