了解从JS中的event.acceleration接收的设备运动数据

时间:2013-10-28 04:54:35

标签: javascript accelerometer

当我在javascript中触发'devicemotion'事件时,我无法完全了解从移动设备返回的信息。我认为我会回来的东西与我所看到的不符,甚至我所看到的似乎也不一致。

所以我理解devicemotion事件有一个X,Y和Z组件,它记录了手机轴的移动。我的假设是这些数字将是设备在一个方向上移动的寄存器,更大的移动会给出更大的数字。因此,例如,如果相机向左移动,我会得到负X值,而右边会给我一个正值。

很快就发现这不是真的。我现在假设(从控制台记录的数字)此事件仅测量沿轴的速度变化。因此左右移动是不可知的,我只知道设备沿x轴移动,并且自上次偶数触发后,速度已经改变了返回的量。因此,我所看到的正面和负面事实上与速度的正面或负面变化有关。

这是正确的理解吗?如果是这样,这是否意味着没有办法收集方向信息,只知道变化发生在一个轴或另一个轴上?

感谢。

1 个答案:

答案 0 :(得分:3)

DeviceMotionEvent以m / s ^ 2的形式返回(等等)加速度。如果你加速向一个方向移动,它将返回正值。如果您以相同方向以恒定速度移动,加速度将返回0(请注意,由于加速度计的灵敏度,这实际上是不可能的,您将始终看到0左右的值,从不精确为0)。如果你在同一个方向上减速但仍然在移动,你将从加速度中获得负值。为了使事情变得更加复杂,如果向相反方向移动,如果加速则返回负值,如果减速则返回正值。这使您可以区分向上移动设备(=正加速度,沿Y轴)或向下(=负加速度,沿Y轴)和向右(=正加速度,沿X轴)或向左( =负加速度,沿X轴)。

如果您想知道设备的移动方向,则必须捕获一段时间内的所有加速度测量结果并计算其方向,例如:如果Y加速度开始为正,则设备必须向上移动,直到您检测到沿Y的负加速度,完全抵消初始加速度。