【问题标题】:Android acceleration direction安卓加速方向
【发布时间】:2013-02-16 00:22:10
【问题描述】:

搜索了一段时间后,我没有找到任何方法将平移加速度方向与旋转分离。

我正在寻找一种方法来获得与手机旋转方式无关的加速度方向(当然也与手机的旋转方式无关)。

基本上这可以让我在加速、减速和方向改变之间做出区别。

我尝试使用从getOrientation 获得的角度来补偿加速度传感器角度,但我试验了getOrientation 角度(方位角、俯仰和滚动)在设备具有平移运动(加速度)时是不一样的。

我需要两者之一:无论设备如何旋转,加速度方向或方向值,无论设备如何加速。

这可能吗?

【问题讨论】:

    标签: android accelerometer android-sensors device-orientation


    【解决方案1】:

    终于找到了!

    Android documentation之后我们可以得到旋转矩阵(getRotationMatrix)来改变手机的坐标系:旋转矩阵R将一个向量从设备坐标系转换到世界坐标系。

    但在参数文档中说(这里是测验):

    gravity - 是一个包含重力向量的 3 个浮点数组 以设备坐标表示。您可以简单地使用这些值 由 TYPE_ACCELEROMETER 类型的 Sensor 的 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);
    

    在哪里

    • GRAVITY 是带有来自 TYPE_GRAVITY 传感器的值的向量,
    • geomangetic 是一个向量,其值来自 TYPE_MAGNETIC_FIELD 传感器,并且
    • linearAcceleration 是一个向量,其值来自 TYPE_LINEAR_ACCELERATION 传感器

    然后在 trueAcceleration 向量中,无论移动设备如何移动其方向,我们都会在移动设备平移中获得加速度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      相关资源
      最近更新 更多