【问题标题】:Azimuth found with Sensor.TYPE_MAGNETIC_FIELD much more unstable than Sensor.TYPE_ORIENTATION使用 Sensor.TYPE_MAGNETIC_FIELD 发现的方位角比 Sensor.TYPE_ORIENTATION 不稳定得多
【发布时间】:2011-07-13 08:49:04
【问题描述】:

我正在做一些增强现实应用程序,我需要方位角来计算屏幕上的某个对象位置。我尝试使用Sensor.TYPE_ORIENTATION 获取方向数据,但由于它已被弃用,我尝试了Sensor.TYPE_MAGNETIC_FIELD。我的问题是使用Sensor.TYPE_MAGNETIC_FIELDSensorManager.getOrientation 获得的值与Sensor.TYPE_ORIENTATION 相比非常不稳定,这使得我的对象在屏幕上跳了一下(当不在一个范围内移动值时,例如 [azimuth -5 方位角+5],而它几乎不移动 Sensor.TYPE_ORIENTATION)。

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)));       
    }
}

Sensor.TYPE_MAGNETIC_FIELD

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));
    }
}

【问题讨论】:

    标签: android orientation sensors


    【解决方案1】:

    仅在使用 SensorManager.DELAY_FASTER 时才会发生。使用 SensorManager.SENSOR_DELAY_GAME 值更稳定...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 2016-05-18
      相关资源
      最近更新 更多