Android: getAngleChange - странные результаты - PullRequest
2 голосов
/ 30 декабря 2011

Я сейчас экспериментирую с некоторыми сенсорами телефонов 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 °, а с таким изменением ориентации).) независимо от того, какие другие изменения ориентации (вдоль двух других осей) сделаны.

Есть ли возможность для этого?

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