我正在做一些增强现实应用程序,我需要方位角来计算屏幕上的某个物体位置。我试着用Sensor.TYPE_ORIENTATION来获取方位数据,因为它已经被弃用了,所以我试着Sensor.TYPE_MAGNETIC_FIELD。我的问题是使用Sensor.TYPE_MAGNETIC_FIELDSensorManager.getOrientation获得的值与Sensor.TYPE_ORIENTATION相比是非常不稳定的,这使得我的对象在屏幕上跳跃一点(当不移动该值在一个范围内跳跃时,例如[方位角-5方位角+5],而它几乎不随Sensor.TYPE_ORIENTATION移动)。
传感器类型方向

public void onSensorChanged(SensorEvent event)
{
    if(event.sensor.getType() == Sensor.TYPE_ORIENTATION)
    {
        newAzimuth = (event.values[0] + 360)%360;
        azimuth = (float) ((newAzimuth * kFilteringFactor) + (azimuth * (1.0 - kFilteringFactor)));
    }
}

磁场传感器
public void onSensorChanged(SensorEvent event) {
    switch (event.sensor.getType()) {
        case Sensor.TYPE_MAGNETIC_FIELD:
            mags = event.values.clone();
            break;
        case Sensor.TYPE_ACCELEROMETER:
            accels = event.values.clone();
            break;
    }
    if (mags != null && accels != null) {
        SensorManager.getRotationMatrix(R, I, accels, mags);
        SensorManager.remapCoordinateSystem(R, SensorManager.AXIS_X,
                SensorManager.AXIS_Z, remappedR);
        SensorManager.getOrientation(remappedR, orientation);
        newAzimuth = (float) Math.round(Math.toDegrees(orientation[0]));
        newAzimuth = (newAzimuth + 360)%360;
        azimuth = (float) (newAzimuth * kFilteringFactor) + (azimuth * (1.0f - kFilteringFactor));
    }
}

最佳答案

只有在使用sensormanager.delay_更快时才会发生这种情况。使用sensormanager.sensor_delay_game,值更稳定…

10-04 10:45