1

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

所以我知道 devicemotion 事件有一个 X、Y 和 Z 组件,它记录了沿手机轴的移动。我的假设是这些数字将是设备在一个方向上移动的记录,较大的移动会返回较大的数字。因此,例如,如果相机向左移动,我会得到一个负 X 值,而向右移动会给我一个正值。

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

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

谢谢。

4

1 回答 1

3

DeviceMotionEvent返回(除其他外)加速度,以 m/s^2 为单位。如果您在一个方向上加快移动速度,它将返回一个正值。如果您在同一方向上以恒定速度移动,则加速度将返回 0(请注意,由于加速度计的灵敏度,这实际上是不可能的,您将始终看到 0 左右的值,而不是正好为 0)。如果你在同一个方向减速,但仍在移动,你会从加速中得到一个负值。更复杂的是,如果你朝相反的方向移动,如果你加速,你会得到负值,如果你减速,你会得到正值。这使您可以区分向上(= 沿 Y 轴的正加速度)或向下(= 沿 Y 轴的负加速度)和向右(= 正加速度,

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

于 2014-03-27T18:52:34.657 回答