3 つの回転値 (アジマス、ピッチ、ロール) を取得するには 2 つの方法があります。
1 つは、タイプ TYPE_ORIENTATION のリスナーを登録することです。これは最も簡単な方法であり、ドキュメントに記載されているように、すべての回転から正しい範囲の値を取得します: 方位角: [0, 359] ピッチ: [-180, 180] ロール: [-90, 90]
もう 1 つは、初めて見たときに理解するのが最も正確で複雑です。Androidが推奨しているので使いたいのですが、値が違います。
方位角: [-180, 180]。-180/180 は S、0 i N、90 E、および -90 Wです。
ピッチ: [-90, 90]。90 は 90、-90 は -90、0 は 0 ですが、-180/180 (画面を下にして横になっている) は 0
です。ロール: [-180, 180]。
同じ値を取得する必要がありますが、小数を使用しますよね?
次のコードがあります。
aValues = new float[3];
mValues = new float[3];
sensorListener = new SensorEventListener (){
public void onSensorChanged (SensorEvent event){
switch (event.sensor.getType ()){
case Sensor.TYPE_ACCELEROMETER:
aValues = event.values.clone ();
break;
case Sensor.TYPE_MAGNETIC_FIELD:
mValues = event.values.clone ();
break;
}
float[] R = new float[16];
float[] orientationValues = new float[3];
SensorManager.getRotationMatrix (R, null, aValues, mValues);
SensorManager.getOrientation (R, orientationValues);
orientationValues[0] = (float)Math.toDegrees (orientationValues[0]);
orientationValues[1] = (float)Math.toDegrees (orientationValues[1]);
orientationValues[2] = (float)Math.toDegrees (orientationValues[2]);
azimuthText.setText ("azimuth: " + orientationValues[0]);
pitchText.setText ("pitch: " + orientationValues[1]);
rollText.setText ("roll: " + orientationValues[2]);
}
public void onAccuracyChanged (Sensor sensor, int accuracy){}
};
助けてください。とてもイライラします。
それらの値で処理する必要がありますか、それとも何か間違っていますか?
ありがとう。