两个角度同时改变加速度计android

时间:2013-03-04 04:57:02

标签: android accelerometer

我编写了一个代码,仅使用加速度计来获取设备的方向。但是两个角度正在同时变化。它意味着平移,倾斜或倾斜滚动或滚动平移,它们中的任何两个在每个方向上几乎相同地变化。为什么会这样?

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

    }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

为什么你在'else'部分中减去两个角度?这会给你一些方向改变。 如果您想确定方向更改,最好使用陀螺仪(如果有)。