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的白皮书了解更多详情.
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浮点数组,检查其返回值浮点数组并选择你喜欢的任何数字......
希望这有助于某人!
小智 7
据我所知,这是因为设备的默认方向.带有Honeycomb的新款Android平板电脑在手机上像风景一样举行时具有纵向方向.
http://developer.android.com/reference/android/hardware/SensorEvent.html
在android文档中有以下信息:
坐标系相对于手机屏幕的默认方向定义.当设备的屏幕方向改变时,不会交换轴.
X轴是水平的并且指向右侧,Y轴是垂直的并且指向上方,Z轴指向屏幕前面的外侧.在该系统中,屏幕后面的坐标具有负Z值.
也许其中一个设备还具有横向作为纵向(默认)方向?
希望它能以某种方式帮助你.
| 归档时间: |
|
| 查看次数: |
14964 次 |
| 最近记录: |