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

TYPE_ACCELEROMETER 返回测量设备加速度的值。您无法单独从 TYPE_ACCELEROMETER 获得方向。您必须将其与 TYPE_MAGNETIC_FIELD 结合,使用这些结果来获取旋转矩阵,然后调用 getOrientation 来获取设备方向。

于 2013-03-04T05:11:52.060 回答
0

使用加速度计,您只能确定设备相对于重力矢量的方向(指向下方)。所以在 (i==1) 部分,你用重力矢量计算角度。

Why do you subtract two of angles in the 'else' part? This will give you some kind of orientation change. If you want to determine orientation change, you better use the gyroscopes (if available).

于 2013-03-04T08:36:41.947 回答