如何将设备协调系统映射到android

时间:2016-04-26 10:02:44

标签: android android-sensors

我从加速度计得到矢量(Ax,Ay,Az)。我知道我的电话协调系统和世界协调系统匹配,当我的手机躺在桌子上,顶部朝北。但是当我改变手机的位置时,坐标系统并不相同,需要重新映射。为此,我需要一个旋转矩阵来解决问题。但无法确定旋转矩阵。我试着跟着踏步而没有运气

Not able to translate device co-ordinate system to world co-ordinate system on android

那么有什么方法可以获得旋转矩阵并在android中执行映射?

我尝试将矢量与三个轴的旋转矩阵相乘。但它没有给出任何令人满意的结果。由于加速度计确定的角度不正确。另外我认为旋转矩阵不符合目的。

rotation matrix

1 个答案:

答案 0 :(得分:1)

出于这些目的,android提供SensorManager给定重力传感器数据和磁传感器数据。首先是重力传感器(加速度计)读数和磁传感器读数。声明数组并将数据存储到它们。旋转阵列将用于存储旋转矩阵数据。 temp []暂时存储数据。

private static final float rotation[] = new float[9];
private static final float temp[] = new float[9];
private static final float grav[] = new float[3];
private static final float mag[] = new float[3];

然后通过以下代码获取旋转矩阵。这里temp是存储轮换信息的临时矩阵

SensorManager.getRotationMatrix(temp, null, grav, mag);

使用以下方法重新映射坐标

SensorManager.remapCoordinateSystem(temp, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, rotation);