首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Sensor.TYPE_MAGNETIC_FIELD发现的方位比Sensor.TYPE_ORIENTATION更不稳定

用Sensor.TYPE_MAGNETIC_FIELD发现的方位比Sensor.TYPE_ORIENTATION更不稳定
EN

Stack Overflow用户
提问于 2011-07-13 08:49:04
回答 1查看 5.1K关注 0票数 4

我正在做一些增强现实应用,我需要方位角来计算一些物体在屏幕上的位置。我试图使用Sensor.TYPE_ORIENTATION获取定位数据,由于不推荐使用它,所以我尝试了Sensor.TYPE_MAGNETIC_FIELD。我的问题是,与Sensor.TYPE_MAGNETIC_FIELDSensorManager.getOrientation相比,用Sensor.TYPE_ORIENTATION获得的值是相当不稳定的,这使得我的对象在屏幕上跳了一点点(当不将值在一个范围内移动时,比如方位角-5 azimuth+5,而它几乎不与Sensor.TYPE_ORIENTATION一起移动)。

Sensor.TYPE_ORIENTATION

代码语言:javascript
复制
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

代码语言:javascript
复制
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));
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-15 16:17:15

只有在使用SensorManager.DELAY_FASTER时才会发生这种情况。使用SensorManager.SENSOR_DELAY_GAME,值更稳定.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6676377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档