1

AndroidセンサーでX軸周りの正しい回転を検出したい。グーグルで調べたところ、次のコードが見つかりました。

   public void onSensorChanged(SensorEvent event) {
   Sensor sensor = event.sensor;
   switch(sensor.getType()) {
   case Sensor.TYPE_ACCELEROMETER:
    mAcc = event.values.clone();
    break;
   case Sensor.TYPE_MAGNETIC_FIELD:
    mMag = event.values.clone();
    break;
   }
   if (mAcc == null || mMag == null) return;

   float R[] = new float[9];
   if (SensorManager.getRotationMatrix(R, null, mAcc, mMag)) {
    SensorManager.getOrientation(R, mOrientation);
   }
  }

mOrientation[1] は、X 軸周りのラジアンを表します。ただし、値は非常に奇妙です。

  1. 電話がテーブルの上に平らに置かれている場合、それは 0 です。
  2. 電話の頭が地面を指している場合、PI/2 です。
  3. 電話がテーブルの上に平らに置かれると、再び 0 になります。
  4. 電話の頭が空を指している場合、-PI/2.

1 と 2 の間の状態は、2 と 3 の間の状態と同じ回転値を持ちます。自分の電話がどの状態にあるのかを知るにはどうすればよいですか?

4

1 に答える 1

0

読み取り値を確認してください。


あなたが報告する兆候と範囲は、Android デバイスで期待されるものと完全に同期していません。

developer.android.com/reference/android/hardware/Sensor.html#TYPE_ORIENTATION

注: このセンサー タイプは従来の理由から存在します。代わりに、 remapCoordinateSystem()およびgetOrientation( ) と組み合わせてgetRotationMatrix ( )を使用して、これらの値を計算してください。

よろしく
CVS@2600Hertz

于 2011-03-05T04:11:57.940 に答える