线性加速方向跟踪手机的上下移动

时间:2014-10-02 06:45:59

标签: android vector android-sensors motion-detection

我试图仅在垂直方向上跟踪设备的移动,即向上和向下移动。这应该与设备的方向无关。我已经知道或尝试过的事情就是这些

  1. 线性加速度由传感器TYPE_LINEAR_ACCELERATION给出,轴是电话轴,因此跟踪任何特定轴都没有区别。

  2. 我尝试应用转置或旋转矢量的倒数(旋转矢量的反转或转置相同),然后尝试跟踪线性加速度矢量的z方向。似乎没有帮助。

  3. 我正在尝试使用重力值(TYPE_GRAVITY)来制作点积,以获得加速度的方向,但它似乎容易出错。即使我快速移动我的设备,也会说它会下降。

  4. 我将在这里概述这个方法

    dotProduct = vectorA[0]*vectorB[0]+vectorA[1]*vectorB[1] + vectorA[2]*vectorB[2];    
    cosineVal = dotProduct/(|vectorA|*|vectorB|)    
    if(cosineVal > 0 ) down else Up.
    

    该方法的缺陷是什么?请帮助,我已经坚持了一段时间了。

1 个答案:

答案 0 :(得分:1)

在我看来,在第3种方法中,你试图找到两个矢量之间的角度cos(重力矢量和加速度矢量)。并且想法是如果角度接近180度你有向上运动,如果角度接近0度你有向下运动。余弦是角度为-90到90度时具有正值的函数。因此,当您的$("#output").append($(this).find("facility_name").text() + "<br />"); 值为正值时,表示手机正在关闭,即使cosineVal接近1次运动也是直线下降。所以反之亦然。当余弦为负时(从90度到270度),你就有了运动。

你可以从https://developer.android.com/reference/android/hardware/SensorEvent.html#values获得cosineVal的向量,你有重力矢量和加速度矢量。
我在下面制作了一个代码片段,你可以试试。

Sensor.TYPE_ACCELEROMETER