2

加速度計のみを使用してデバイスの向きを取得するコードを作成しました。しかし、2 つの角度が同時に変化しています。パン、チルト、チルト ロール、またはロール パンを意味します。なぜそれが起こっているのですか?

     public void onSensorChanged(SensorEvent event) {

         switch (event.sensor.getType()) {
         case Sensor.TYPE_ACCELEROMETER:
             System.arraycopy(event.values, 0, mGravs, 0, 3);
         break;
              default:
                         return;
         }
         X=mGravs[0];
         Y=mGravs[1];
         Z=mGravs[2];
      if(i==1){
          R=Math.sqrt(X*X+Y*Y+Z*Z);
          pan1=Math.round((180/Math.PI)*Math.acos(X/R)) ;
          tilt1=Math.round((180/Math.PI)*Math.acos(Y/R)) ;
          roll1=Math.round((180/Math.PI)*Math.acos(Z/R));
          i=0;
      }

      else{

        R=Math.sqrt(X*X+Y*Y+Z*Z);
          pan=Math.round((180/Math.PI)*Math.acos(X/R))-pan1;
          tilt=Math.round((180/Math.PI)*Math.acos(Y/R))-tilt1;
          roll=Math.round((180/Math.PI)*Math.acos(Z/R))-roll1;
          text.setText("Angle X" +pan+"\nAngle Y" +tilt+"\nAngle Z" +roll);
      }

    }
4

2 に答える 2

0

加速度計を使用すると、重力ベクトル(下向き)に対するデバイスの向きのみを決定できます。したがって、(i == 1)の部分では、重力ベクトルを使用して角度を計算します。

'else'の部分で2つの角度を引くのはなぜですか?これにより、ある種の向きが変わります。向きの変化を判断したい場合は、ジャイロスコープ(利用可能な場合)を使用することをお勧めします。

于 2013-03-04T08:36:41.947 に答える
0

TYPE_ACCELEROMETER は、デバイスの加速度を測定する値を返します。TYPE_ACCELEROMETER だけでは向きを取得できません。これを TYPE_MAGNETIC_FIELD と組み合わせて、これらの結果を使用して回転行列を取得し、getOrientation を呼び出してデバイスの向きを取得する必要があります。

于 2013-03-04T05:11:52.060 に答える