0

在我的应用程序中,我想计算应用程序开始与当前测量角度之间的角度差。因此我使用Sensor.TYPE_ACCELEROMETER andSensor.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°,我的差异角度就会出错。我怎么能处理得这么干净,所以它适用于左右旋转。

4

0 回答 0