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ę!