Android SensorManager.getOrientation () devuelve el tono entre -PI / 2 y PI / 2
Estoy diseñando una aplicación que necesita verificar la orientación del dispositivo (Azimuth, Pitch and Roll). Yo uso el siguiente código para lograr esto:
@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
}
}
Ahora puedo obtener los valores de azimut, tono y balanceo de la 'orientación' flotante []. Todo va bien para los valores de azimut y balanceo (devuelve el ángulo correcto), sin embargo, cuando imprimo el valor del tono (orientación [1]), siempre recupero un ángulo entre PI / 2 y -PI / 2. No entiendo porque No puedo recuperar un ángulo mayor que PI / 2 o menor que -PI / 2. Tan pronto como tengo un ángulo de + - PI / 2 y sigo girando mi dispositivo (Samsung Galaxy S2), el ángulo disminuye repentinamente después de alcanzar el valor PI / 2.
¿Alguien puede explicarme por qué el ángulo de inclinación se está comportando de manera poco común?
¡Gracias por adelantado!