在寻找了一段时间后,我没有找到任何方法来分离平移加速度方向和旋转。
我正在寻找一种方法,可以独立于手机的旋转方式获得加速度方向(当然也可以独立于手机的旋转方式)。
基本上,这将允许我在加速、减速和改变方向之间做出区别。
我试图用从getOrientation获得的加速度传感器角度进行补偿,但我实验发现,当设备有平移运动(加速度)时,getOrientation角度(方位角、俯仰角和滚动角)是不同的。
我需要两者之一:无论设备是如何旋转的加速方向,还是无论设备如何加速的方向值。
这有可能吗?
发布于 2013-06-03 23:15:48
我们终于找到了!
在Android documentation之后,我们可以得到旋转矩阵(getRotationMatrix)来转换移动设备的坐标系:旋转矩阵R将一个矢量从设备坐标系转换到世界坐标系。
但是在参数文档中写道(这里是测验):
gravity -is包含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矢量中,我们有移动平移的加速度,无论移动如何移动它的方向。
https://stackoverflow.com/questions/15158769
复制相似问题