2014-01-28 68 views
0

我需要能夠測量加速度計的變化,而不是其實際位置。我需要在它周圍移動一個精靈,並且只有當設備的「默認」(如果你願意的話)平放在桌子上時,它纔會起作用。我需要能夠衡量其變化。我聽說矩陣乘法和事情是必要的,但有沒有更簡單的方法來做到這一點?測量加速度計的變化。不是位置

回答

1

註冊SensorEventListener時,必須覆蓋onSensorChanged()。這將返回Z軸上X,Y,&的變化。如果你想從這個數據計算旋轉矩陣,你還需要使用磁場傳感器。怎麼樣?這應該讓你去:

// 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 –