SensorManager.getOrientation дает очень нестабильные результаты - PullRequest
3 голосов
/ 24 января 2012

Я получаю ориентацию телефона с помощью

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

1 Ответ

0 голосов
/ 24 января 2012

Просто буферизируйте значения, вычисляя среднее (есть много разных возможностей вычисления: http://en.wikipedia.org/wiki/Average#Types).Также учтите, что чем больше вы буферизируете, тем медленнее приложение будет реагировать на изменения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...