我试图仅在垂直方向上跟踪设备的移动,即向上和向下移动。这应该与设备的方向无关。我已经知道或尝试过的事情就是这些
线性加速度由传感器TYPE_LINEAR_ACCELERATION给出,轴是电话轴,因此跟踪任何特定轴都没有区别。
我尝试应用转置或旋转矢量的倒数(旋转矢量的反转或转置相同),然后尝试跟踪线性加速度矢量的z方向。似乎没有帮助。
我正在尝试使用重力值(TYPE_GRAVITY)来制作点积,以获得加速度的方向,但它似乎容易出错。即使我快速移动我的设备,也会说它会下降。
我将在这里概述这个方法
dotProduct = vectorA[0]*vectorB[0]+vectorA[1]*vectorB[1] + vectorA[2]*vectorB[2];
cosineVal = dotProduct/(|vectorA|*|vectorB|)
if(cosineVal > 0 ) down else Up.
该方法的缺陷是什么?请帮助,我已经坚持了一段时间了。
答案 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