私のアプリケーションでは、アプリケーションの開始と現在の測定角度の角度差を計算したいと考えています。したがって、現在の向きを取得するためSensor.TYPE_ACCELEROMETER
に とを使用します。Sensor.TYPE_MAGNETIC_FIELD
これは非常にうまく機能します。ここに私のコード:
@Override
public void onSensorChanged(SensorEvent event) {
if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE)
return;
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
valuesAccelerometer = lowPass(event.values.clone(),
valuesAccelerometer);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
valuesMagneticField = lowPass(event.values.clone(),
valuesMagneticField);
}
boolean success = SensorManager.getRotationMatrix(matrixR, matrixI,
valuesAccelerometer, valuesMagneticField);
if (success) {
SensorManager.getOrientation(matrixR, matrixValues);
azimuth = (float) Math.toDegrees(matrixValues[0]);
if (azimuth < 0.0f) {
azimuth += 360.0f;
}
if (!initAz) {
startAzimuth = azimuth;
initAz = true;
} else {
float difAz = startAzimuth-azimuth;
Log.i("Test", "" +"Dif: "+ difAz + "Act_Value " + azimuth + " Start_Value " + startAzimuth);
}
}
}
ここで私の問題を説明するには、Logcat の例を使用します。
Dif: -220.63545 Act_Value 358.24 Start_Value 137.61
Dif: -220.7943 Act_Value 358.40 Start_Value 137.61
Dif: -221.49236 Act_Value 359.10 Start_Value 137.61
Dif: 137.07309 Act_Value 0.53 Start_Value 137.61
Dif: 135.63617 Act_Value 1.97 Start_Value 137.61
Dif: 135.16443 Act_Value 2.44 Start_Value 137.61
Dif: 136.15468 Act_Value 1.457 Start_Value 137.61
Dif: 136.72552 Act_Value 0.88 Start_Value 137.61
現在の測定値が 360° から 0° に変わると、ディファレンス エンジェルが間違った方向に変わります。どうすればこれをきれいに処理できるので、左右の回転で機能しますか。