我从加速度计得到矢量(Ax,Ay,Az)。我知道我的电话协调系统和世界协调系统匹配,当我的手机躺在桌子上,顶部朝北。但是当我改变手机的位置时,坐标系统并不相同,需要重新映射。为此,我需要一个旋转矩阵来解决问题。但无法确定旋转矩阵。我试着跟着踏步而没有运气
Not able to translate device co-ordinate system to world co-ordinate system on android
那么有什么方法可以获得旋转矩阵并在android中执行映射?
我尝试将矢量与三个轴的旋转矩阵相乘。但它没有给出任何令人满意的结果。由于加速度计确定的角度不正确。另外我认为旋转矩阵不符合目的。
答案 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);