AndroidセンサーでX軸周りの正しい回転を検出したい。グーグルで調べたところ、次のコードが見つかりました。
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 の間の状態と同じ回転値を持ちます。自分の電話がどの状態にあるのかを知るにはどうすればよいですか?