2014-01-28 4 views
0

Мне нужно измерить изменение акселерометра, а не его фактическое положение. Мне нужно переместить спрайт с ним, и он работает только тогда, когда «по умолчанию» устройства, если хотите, будет плоским на столе. Мне нужно уметь измерять его изменения. Я слышал, что матричное умножение и вещи необходимы, но есть ли более простые способы сделать это?Измерение изменения акселерометра. не позиция

ответ

1

Когда вы регистрируете SensorEventListener, вы должны переопределить onSensorChanged(). Это возвращает изменение на оси X, Y, & Z. Если вы хотите вычислить матрицу вращения из этих данных, вам также необходимо использовать датчик магнитного поля. Как правильно? Это должно вас заинтересовать:

// Deduced from Accelerometer data 
    private float[] gravityMatrix = new float[3]; 
    // Magnetic field 
    private float[] geomagneticMatrix = new float[3]; 
    private boolean sensorReady = false; 
    private int counter = 0; 

    public void onSensorChanged(SensorEvent event) { 

     float[] mIdentityMatrix = new float[16]; 
     mIdentityMatrix[0] = 1; 
     mIdentityMatrix[4] = 1; 
     mIdentityMatrix[8] = 1; 
     mIdentityMatrix[12] = 1; 

     if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
      if (counter++ % 10 == 0) { 
       gravityMatrix = event.values.clone(); 
       sensorReady = true; 
      } 
     } 
     if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) 
      geomagneticMatrix = event.values.clone(); 

     if (sensorReady) 
      SensorManager.getRotationMatrix(mRotationMatrix, 
        mIdentityMatrix, gravityMatrix, geomagneticMatrix); 
    } 
+1

Это действительно не так сложно. Вы также можете использовать датчик вращения, но не все устройства имеют это. –

+0

Что мне следует использовать для mRotationMatrix и где я могу получить рассчитанные значения x, y и z? Благодарю. – user2005938

+1

Они объясняют это в определении метода: http://goo.gl/A6kk0w –

Смежные вопросы