Android: правильная интерпретация значений датчика - PullRequest
5 голосов
/ 19 марта 2012

Итак, я изучал документацию SensorEvent , пытаясь выяснить, как определить направление на север относительно данной оси телефона.Я нарисовал небольшое изображение, которое иллюстрирует мою концепцию работы системы координат:

my conception of the coordinate system

Так что, если мировые координаты x , y и z , где магнитный север расположен вдоль z , а y указывает на небо, а координаты телефона Px , Py и Pz , тогда я хотел бы иметь возможность рассчитать проекцию каждого вектора на другой.

Кажется, что SENSOR_TYPE_ROTATION_VECTOR может бытьэто правильная вещь, но мне кажется, что она не дает мне достаточно информации, чтобы получить все эти прогнозы.Должен ли я нормализовать ROTATION_VECTOR и добавить его к нужной мне оси, а затем вытянуть компоненты?

Другой большой одиночный датчик, похоже, SENSOR_TYPE_ORIENTATION, но, опять же, мне не ясно, что делать сэти значения.Если я хочу знать три проекции реальной системы координат на Py , я бы просто повернул [0, 1, 0] вдоль заданных координат, например, так:

// Assume here that I've received values
// and broken them out into 
// a = azimuth
// p = pitch
// r = roll

// Convert to radians
a = a*Math.Pi/180;
p = p*Math.PI/180;
r = r*Math.PI/180;

// Given that Py is initially 0, 1, 0, apply general rotation matrix:
float[] Py = new float[3];
Py[0] = -Math.cos(p)*Math.sin(a) + Math.sin(p)*Math.sin(r)*Math.cos(a);
Py[1] = Math.cos(p)*Math.cos(a) + Math.sin(p)*Math.sin(r)*Math.sin(a);
Py[2] = Math.sin(p)*Math.cos(a);

Где я только что получил эти формулы из формулы для общих вращений (поскольку он вращает единичный вектор, вы можете просто выбрать центральный столбец).Я думаю, что компоненты переменной Py будут тогда проекциями x , y и z на Py , ноУ меня есть это задом наперед?Вместо этого это проекции Py на каждую из трех осей реального мира?

Наконец, я заметил, что есть опция getRotationMatrixFromVector (), которая, похоже, рассчитывает эти проекциидля вас, но опять же я не уверен, что у меня есть вещи полностью назад.Если я хочу знать три проекции x . y и z на Py , могу ли я получить 2-й столбец матрицы вращения или 2-й ряд?

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

...