8

私はこれに関してあまりにも長い間問題を抱えてきました。このコードは、加速度計のdx、dy、dz、およびdxの現在の合計を出力する必要があります。また、方位角、ピッチ、およびロールを出力する必要があります。

ここに記載されている情報を使用しましたが、役に立ちませんでした。

このコードは、ピッチ、方位角、またはロールを正しく出力しません。最後の3つのテキストビューに対してそれぞれ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] + "");
}
4

2 に答える 2

6

私は何かが足りないかもしれません(そしてあなたはすでにこれを解決しているかもしれません)が、私にはあなたのswitchステートメントが間違っているように見えます:

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

センサーイベントがの場合、イベントの値は両方にTYPE_ACCELEROMETER複製され、trueに設定されます。このブロックの順序を変更するか、最初のケースの後にを追加する必要があると思います。accelerometerValuesgeomagneticMatrixsensorReadybreak;

于 2010-06-29T16:01:30.567 に答える
2

getOrientation()から0.0、-0.0、-0.0を取得する理由は、getRotationMatrix()が常に有効な結果を取得するとは限らないためです。getRotationMatrix()の戻り値を確認する必要があります。これは、結果が無効な場合はfalseになり、成功した場合はtrueになります。

追加:実際、それは正しく出てこなかった。agandersが指摘した理由により、無効な結果が得られます。戻り値を確認することは、実際には無効な結果を取得していることを示しているにすぎません。

于 2010-09-10T04:37:57.223 に答える