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.
Может кто-нибудь объяснить мне, почему угол наклона ведет себя так необычно?
Заранее спасибо!