来自Android Accelerometer的方向

pth*_*pth 13 android accelerometer

我在两个不同的设备(Elocity A7和Archos 7 Home平板电脑)上测试加速度计输出,但传感器似乎给出了不同的结果.我将它编程为设置为横向模式,但x和y轴似乎是两个设备之间的对手.当垂直于地面并且Archos X轴返回0时,x轴返回10.Elocity平板电脑是android 2.2,Archos是2.1.有人能指出我正确的方向,如何从这两个设备之间的加速度计同步?

Har*_*tok 15

实际上,加速度计轴线相对于设备的默认方向.

在这里如何处理它:

static void canonicalOrientationToScreenOrientation(
         int displayRotation, float[] canVec, float[] screenVec) 
{ 
    final int axisSwap[][] = { 
    {  1,  -1,  0,  1  },     // ROTATION_0 
    {-1,  -1,  1,  0  },     // ROTATION_90 
    {-1,    1,  0,  1  },     // ROTATION_180 
    {  1,    1,  1,  0  }  }; // ROTATION_270 

    final int[] as = axisSwap[displayRotation]; 
    screenVec[0]  =  (float)as[0] * canVec[ as[2] ]; 
    screenVec[1]  =  (float)as[1] * canVec[ as[3] ]; 
    screenVec[2]  =  canVec[2]; 
} 
Run Code Online (Sandbox Code Playgroud)

该解决方案由NVidia提供.查看有关Android Accelerometer的白皮书了解更多详情.

  • 有关更多详细信息,请查看此链接http://developer.download.nvidia.com/tegra/docs/tegra_android_accelerometer_v5f.pdf (2认同)

use*_*495 11

只是想为Hartok的答案添加一些内容,因为我一开始无法理解它...

我已经重写了方法:

public static float[] adjustAccelOrientation(int displayRotation, float[] eventValues) 
{ 
    float[] adjustedValues = new float[3];

    final int axisSwap[][] = {
    {  1,  -1,  0,  1  },     // ROTATION_0 
    {-1,  -1,  1,  0  },     // ROTATION_90 
    {-1,    1,  0,  1  },     // ROTATION_180 
    {  1,    1,  1,  0  }  }; // ROTATION_270 

    final int[] as = axisSwap[displayRotation]; 
    adjustedValues[0]  =  (float)as[0] * eventValues[ as[2] ]; 
    adjustedValues[1]  =  (float)as[1] * eventValues[ as[3] ]; 
    adjustedValues[2]  =  eventValues[2];

    return adjustedValues;
}
Run Code Online (Sandbox Code Playgroud)

完全相同的事情,只是有更多用户友好的变量名称,我在内部重新创建浮点因为我需要它...只需调用此函数,放入getRotation和event.values浮点数组,检查其返回值浮点数组并选择你喜欢的任何数字......

希望这有助于某人!

  • 您需要旋转显示。(WindowManager)this.getSystemService(WINDOW_SERVICE).getDefaultDisplay()。getRotation() (2认同)

小智 7

据我所知,这是因为设备的默认方向.带有Honeycomb的新款Android平板电脑在手机上像风景一样举行时具有纵向方向.

http://developer.android.com/reference/android/hardware/SensorEvent.html

在android文档中有以下信息:

坐标系相对于手机屏幕的默认方向定义.当设备的屏幕方向改变时,不会交换轴.

X轴是水平的并且指向右侧,Y轴是垂直的并且指向上方,Z轴指向屏幕前面的外侧.在该系统中,屏幕后面的坐标具有负Z值.

也许其中一个设备还具有横向作为纵向(默认)方向?

希望它能以某种方式帮助你.