2010-06-03 2 views
8

나는 이것에 대해 너무 오랫동안 문제를 겪어왔다. 이 코드는 가속도계의 dx, dy, dz 및 dx의 누적 합계를 출력해야합니다. 또한 방위각, 피치 및 롤을 출력해야합니다.안드로이드 2.1에서 getRotationMatrix와 getOrientation 사용하기

I've used the information given here 그러나 아무 소용이 없습니다.

이 코드는 피치, 방위각 또는 롤을 올바르게 출력하지 않습니다. 그것은 마지막 세 textviews 각각 0.0, -0.0, -0.0을 출력합니다.

switch (event.sensor.getType()) { 
    case Sensor.TYPE_ACCELEROMETER: 
     accelerometerValues = event.values.clone(); 
    case Sensor.TYPE_MAGNETIC_FIELD: 
     geomagneticMatrix = event.values.clone(); 
     sensorReady = true; 
     break; 
    default: 
     break; 
} 

if (geomagneticMatrix != null && accelerometerValues != null && sensorReady) { 
    sensorReady = false; 

    float[] R = new float[16]; 
    float[] I = new float[16]; 

    SensorManager.getRotationMatrix(R, I, accelerometerValues, geomagneticMatrix); 

    float[] actual_orientation = new float[3]; 
    SensorManager.getOrientation(R, actual_orientation); 

    tvXCoordinate.setText(accelerometerValues[0] + ""); 
    tvYCoordinate.setText(accelerometerValues[1] + ""); 
    tvZCoordinate.setText(accelerometerValues[2] + ""); 

    floatXTotal += accelerometerValues[0]; 
    tvXTotal.setText(floatXTotal + ""); 

    tvAzimuth.setText(actual_orientation[0] + ""); 
    tvPitch.setText(actual_orientation[1] + ""); 
    tvRoll.setText(actual_orientation[2] + ""); 
} 

답변

6

내가 뭔가를 누락 될 수 있습니다 (당신은 이미이 문제를 해결할 수도 있습니다)하지만, 나에게 당신의 switch 문처럼 보이는 것은 잘못된 것입니다 : 당신의 센서 이벤트에서 TYPE_ACCELEROMETER 값입니다

switch (event.sensor.getType()) { 
     case Sensor.TYPE_ACCELEROMETER: 
      accelerometerValues = event.values.clone(); 
     case Sensor.TYPE_MAGNETIC_FIELD: 
      geomagneticMatrix = event.values.clone(); 
      sensorReady = true; 
      break; 
     default: 
      break; 
    } 

경우 이벤트는 accelerometerValuesgeomagneticMatrix으로 복제되고 sensorReady은 true로 설정됩니다. 이 블록의 순서를 변경하거나 첫 번째 사례 이후에 break;을 추가해야 할 수도 있습니다.

2

getOrientation()에서 0.0, -0.0, -0.0이 나오는 이유는 getRotationMatrix()가 항상 유효한 결과를 얻지 못한다는 것입니다. getRotationMatrix()의 반환 값을 확인해야합니다. 반환 값은 결과가 유효하지 않은 경우 false이거나 성공한 경우 true입니다.

올린 날짜 : 실제로, 그것은 제대로 나오지 않았습니다. 병역 기피자가 지적한 이유로 잘못된 결과를 얻고 있습니다. 반환 값을 확인하는 것은 실제로 잘못된 결과를 얻고 있다는 표시 일뿐입니다.

관련 문제