Я хочу определить правильные повороты вокруг оси X с помощью датчиков Android. После поиска в Google, я нахожу этот код:
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;
switch(sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
mAcc = event.values.clone();
break;
case Sensor.TYPE_MAGNETIC_FIELD:
mMag = event.values.clone();
break;
}
if (mAcc == null || mMag == null) return;
float R[] = new float[9];
if (SensorManager.getRotationMatrix(R, null, mAcc, mMag)) {
SensorManager.getOrientation(R, mOrientation);
}
}
mOrientation [1] представляет радианы вокруг оси X. Однако значение очень странное.
- Когда телефон лежит на столе, он равен 0.
- Когда голова телефона указывает на землю, это PI / 2.
- Когда телефон лежит на столе плоским дном, снова 0.
- Когда голова телефона указывает на небо, это -PI / 2.
Состояния между 1,2 имеют те же значения вращения, что и между 2,3. Как я могу узнать, в каком состоянии находится мой телефон?