在搜索了一段时间后,我没有找到任何方法将旋转加速度方向与旋转隔离开来。
我正在寻找一种方法来获得加速方向,与手机的旋转方式无关(当然也与旋转方式无关)。
基本上这可以让我在加速度,减速度和方向变化方面做出改变。
我尝试使用从getOrientation获得的角度补偿加速度传感器角度,但我尝试了当设备具有平移运动(加速度)时,getOrientation角度(Azimut,pitch和roll)不同。
我需要两种方法之一:加速方向,无论设备如何旋转或方向值,无论设备如何加速。
这甚至可能吗?
答案 0 :(得分:1)
最后我们找到了它!
在Android documentation之后我们可以得到旋转矩阵(getRotationMatrix)来改变移动坐标系:旋转矩阵R将一个矢量从设备坐标系转换到世界坐标系。
但是在参数文档中说(这里是测验):
gravity - 是一个包含重力向量的3个浮点数组 以设备的坐标表示。您可以简单地使用这些值 由TYPE_ACCELEROMETER类型的传感器的SensorEvent返回。
那么如果您使用文档说加速度计值作为旋转矩阵上的参数,当然加速将受到影响,而移动翻译和矩阵将是无用的。
您必须使用重力传感器值(TYPE_GRAVITY类型的传感器
,而不是使用加速计传感器值由于此传感器不会受到移动翻译的影响,因此在翻译移动设备时可以使用旋转矩阵。
最后,适合我们的代码是:
float[] trueacceleration = new float[4];
float[] R = new float[16];
float[] RINV = new float[16];
SensorManager.getRotationMatrix(R, I, GRAVITY, geomagnetic);
Matrix.invertM(RINV, 0, R, 0);
Matrix.multiplyMV(trueAcceleration, 0, RINV, 0, linearAcceleration, 0);
哪里
然后在trueAcceleration向量中,我们在移动翻译中加速,无论移动方向如何移动。