我编写了一个代码,仅使用加速度计来获取设备的方向。但是两个角度正在同时变化。它意味着平移,倾斜或倾斜滚动或滚动平移,它们中的任何两个在每个方向上几乎相同地变化。为什么会这样?
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);
}
}
答案 0 :(得分:0)
TYPE_ACCELEROMETER返回测量设备加速度的值。您无法单独从TYPE_ACCELEROMETER获取方向。您必须将它与TYPE_MAGNETIC_FIELD结合使用,使用这些结果获取旋转矩阵,然后调用getOrientation以获取设备方向。
答案 1 :(得分:0)
使用加速度计,您只能确定相对于重力矢量的设备方向(指向下方)。所以在(i == 1)部分,你用重力矢量计算角度。
为什么你在'else'部分中减去两个角度?这会给你一些方向改变。 如果您想确定方向更改,最好使用陀螺仪(如果有)。