Я сейчас экспериментирую с некоторыми сенсорами телефонов Android.Для тестирования я использую Samsung Galaxy S. Поскольку у него нет гироскопа, я использую акселерометр и датчик для магнитного поля.
Что я в основном хочу сделать, это получить определенный угол, при перемещении устройства.Я пытаюсь объяснить: подумайте, что вы держите телефон в ландшафтном режиме перед лицом, а затем вы поворачиваетесь на 90 градусов вправо.
Я использую следующий код для получения текущей матрицы вращения:
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
mGravity = event.values.clone();
}
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
mGeomagnetic = event.values.clone();
}
if (mGravity != null && mGeomagnetic != null) {
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, mGravity,
mGeomagnetic);
}
}
Это хорошо работает, а затем я использую SensorManager.getAngleChange(angleChange, R, lastR);
для достижения изменения угла.Затем я получаю (примерно) 65 ° в angleChange[1]
, если поворачиваюсь, как описано выше, и не наклоняю телефон и не меняю что-либо еще ...
Но если при повороте я также наклоняю телефон на 90 °Я сам (так что дисплей потом смотрит в потолок) получаю (примерно) 90 ° в angleChange[1]
.
Я сейчас очень растерялся, почему такой поворот влияет на значение в angleChange[1]
и наС другой стороны, почему необходимо получить ожидаемые 90 °.
Чего я хочу добиться, так это получить угол при перемещении телефона, как описано выше (не с шагом 90 °, а с таким изменением ориентации).) независимо от того, какие другие изменения ориентации (вдоль двух других осей) сделаны.
Есть ли возможность для этого?