Android SensorManager.getOrientation () zwraca wysokość między -PI / 2 a PI / 2

Projektuję aplikację, która musi sprawdzić orientację urządzenia (Azimuth, Pitch and Roll). Aby to osiągnąć, używam następującego kodu:

@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
    }
}

Teraz jestem w stanie uzyskać wartości azymutu, wysokości i rzutu z pływaka „orientacja” []. Wszystko idzie dobrze dla wartości azymutu i przechyłu (zwraca prawidłowy kąt), jednak kiedy drukuję wartość wysokości (orientacja [1]), zawsze odzyskuję kąt między PI / 2 i -PI / 2. Nie rozumiem dlaczego? Nie mogę pobrać kąta większego niż PI / 2 lub mniejszego niż -PI / 2. Gdy tylko osiągnę kąt + - PI / 2 i nadal obracam urządzenie (Samsung Galaxy S2), kąt nagle spada po osiągnięciu wartości PI / 2.

Czy ktoś może mi wyjaśnić, dlaczego kąt nachylenia zachowuje się tak rzadko?

Z góry dziękuję!

questionAnswers(1)

yourAnswerToTheQuestion