Android SensorManager.getOrientation () возвращает высоту между -PI / 2 и PI / 2

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

@Override
public void onSensorChanged(SensorEvent event) {
    if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
        gravityMatrix = event.values.clone();// Fill gravityMatrix with accelerometer values
    else if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
        geomagneticMatrix = event.values.clone();// Fill geomagneticMatrix with magnetic-field sensor values
    if(gravityMatrix != null && geomagneticMatrix != null){
        RMatrix = new float[16];
        IMatrix = new float[16];

        SensorManager.getRotationMatrix(RMatrix, IMatrix, gravityMatrix, geomagneticMatrix);// Retrieve RMatrix, necessary for the getOrientation method
        SensorManager.getOrientation(RMatrix, orientation);// Get the current orientation of the device
    }
}

Теперь я могу получить значения азимута, шага и крена из float 'direction' []. Все идет хорошо для значений азимута и крена (он возвращает правильный угол), однако, когда я печатаю значение шага (ориентация [1]), я всегда получаю угол между PI / 2 и -PI / 2. Я не понимаю почему? Я не могу получить угол больше, чем PI / 2 или меньше, чем -PI / 2. Как только у меня есть угол + - PI / 2, и я продолжаю вращать свое устройство (Samsung Galaxy S2), угол внезапно уменьшается после того, как он достиг значения PI / 2.

Может кто-нибудь объяснить мне, почему угол наклона ведет себя так необычно?

Заранее спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос