2011-12-07 10 views
1

磁場と加速度計を使用して方位を計算しようとしています。すべての値が0になるAndroid getRotationMatrix

public void onSensorChanged(SensorEvent event) { 
    // TODO Auto-generated method stub 
    Log.e(TAG, "Sensor Changed"); 

    float[] r = new float[9]; 
    float[] i = new float[9]; 

    float[] accValues = new float[3]; 
    float[] geoVallues = new float[3]; 


    } 
    if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
     Log.e(TAG, "Accelerometer Changed"); 
     accValues = event.values.clone(); 
    } 

    if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { 
     Log.e(TAG, "Magnetif Field Changed"); 
     geoVallues = event.values.clone(); 
    } 

    if (accValues != null && geoVallues != null) { 
     SensorManager.getRotationMatrix(r, i, accValues, geoVallues); 
     float[] v = new float[3]; 
     SensorManager.getOrientation(r, v); 
     oriView.setText("Orientation:\nAz=" + Math.toDegrees((v[0])) + "\nPitch=" + Math.toDegrees((v[1])) + "\nRoll=" + Math.toDegrees((v[2]))); 
    } 
} 

間違って何任意のアイデア:しかし、計算されたAZ、ピッチおよびロールは0である。ここでは、コードですか?

+0

を試してみてくださいあなたが(http://developer.android.com/reference/android/hardware/SensorManager.html)[ドキュメントに示されているように]が正しくセンサーのリスナーを登録したことがありますか?また、 'getRotationMatrix()'が[false'を返す]でないかどうかを確認してください(http://developer.android.com/reference/android/hardware/SensorManager.html#getRotationMatrix%28float []、%20float [] 、%20float []、%20float []%29)。 –

答えて

2

この

boolean success = SensorManager.getRotationMatrix(
    matrixR, 
    matrixI, 
    valuesAccelerometer, 
    valuesMagneticField); 

if(success){ 
SensorManager.getOrientation(matrixR, matrixValues); 

double azimuth = Math.toDegrees(matrixValues[0]); 
double pitch = Math.toDegrees(matrixValues[1]); 
double roll = Math.toDegrees(matrixValues[2]); 

readingAzimuth.setText("Azimuth: " + String.valueOf(azimuth)); 
readingPitch.setText("Pitch: " + String.valueOf(pitch)); 
readingRoll.setText("Roll: "+String.valueOf(roll)); 
+0

ありがとう...私は実際には全く異なる方法で解決しましたが(全体の問題をすべて変更しました)、これは将来他の人に役立つかもしれません。 – Tring

関連する問題