【问题标题】:SensorManager.getOrientation gives very unstable resultsSensorManager.getOrientation 给出非常不稳定的结果
【发布时间】:2012-01-24 15:08:24
【问题描述】:

的帮助下我得到了我的手机方向
SensorManager.getOrientation

但是结果很不稳定,大概是+-8度,有什么好的过滤结果的方法吗?

这就是我获取值的方式:

public void onSensorChanged(SensorEvent event) 
    {
        switch (event.sensor.getType ()){
            case Sensor.TYPE_ACCELEROMETER:
                aValues = event.values.clone();
                break;
            case Sensor.TYPE_MAGNETIC_FIELD:
                mValues = event.values.clone();
                break;
        }
        float[] R = new float[16];
        float[] orientationValues = new float[3];

        if( aValues == null || mValues == null )
            return;

        if( !SensorManager.getRotationMatrix (R, null, aValues, mValues) )
            return;

        float[] outR = new float[16];
        SensorManager.remapCoordinateSystem(R, SensorManager.AXIS_Z, SensorManager.AXIS_MINUS_X, outR);

        SensorManager.getOrientation (outR, orientationValues);

        orientationValues[0] = (float)Math.toDegrees (orientationValues[0]);
        orientationValues[1] = (float)Math.toDegrees (orientationValues[1]); 
        orientationValues[2] = (float)Math.toDegrees (orientationValues[2]);
    }

【问题讨论】:

  • 您可以使用 System.arraycopy 而不是 event.values.clone() 来提高性能。在这里,您总是在创建新对象,这非常昂贵。

标签: android android-sensors


【解决方案1】:

只需通过计算平均值来缓冲值(有许多不同的计算可能性:http://en.wikipedia.org/wiki/Average#Types)。还要考虑缓冲越多,应用对更改的反应就越慢!

【讨论】:

猜你喜欢
  • 2020-06-21
  • 2020-04-28
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 2015-09-19
  • 1970-01-01
相关资源
最近更新 更多