在自由落体期间,iPhone 应该在所有三个轴上发送加速度值为0。那么如何检测 iPhone 覆盖的距离呢?
在自由落体期间,iPhone 应该在所有三个轴上发送加速度值为0。那么如何检测 iPhone 覆盖的距离呢?
v+=a*dt;
d+=v*dt;
从静止开始
距离 = 0.5 x 加速度 x 时间2
重力加速度 = 9.81 m/s2
我假设您不会将手机掉落到达终端速度。如果是这样,当您找回手机时,我怀疑您的应用程序将没有太大用处 :)
忽略空气阻力:
float t; // time since drop
float distance = 9.81f * 0.5f * t * t;
如果需要更长的距离(如从飞机上跳下),您还可以使用位置服务。CLLocation包含高度信息。
考虑到风阻的问题,一个解决方案是使用重力加速度和您正在读取的实际加速度规范之间的差异:
d2x / dt2 = g - |a|
其中 g = 9.8,|a| = sqrt(a12 + a22 + a32),其中 an 是每个轴上加速度计的读数。
然后使用类似欧拉方法的数值解法解决微分方程。
您甚至可以聪明地使用 GPS 查找本地的 g 值。
距离 = 0.5 * 重力加速度 * 下落时间2
在最简单的形式中。
我们可以安全地忽略空气摩擦和风,考虑到 iPhone 的形状和重量以及硬件从中掉落时仍然有用的距离。 ;)
然而,如果您在打开降落伞之前让手机自由落体,那么有太多因素需要考虑,无法可靠地根据加速度计本身计算距离。它可能也不适用于这种应用,因为读数非常不稳定,其主要目的是确定设备的方向或检测潜在的自由落体(在类似加速度计芯片用于笔记本电脑的情况下)。
这很简单,因为你必须考虑空气摩擦力。空气摩擦力会导致设备达到“a”终端速度。只有在终端速度时,加速度计才会指示0。
这里给出的公式假定在真空中自由落体(没有摩擦)。
换句话说,计算行驶距离相当复杂(一个问题是终端速度取决于手机下落时的方向)。
还要记住,在任何坠落场景中,手机非常有可能翻滚。随着手机侧面的变化,阻力也会发生变化,加速度计不会读取零。
无论加速度计是自由落体还是放在桌子上,它都会在所有三个轴上读取0(或g)。因此,问题是无意义的,因为没有办法在不做自由落体假设的情况下确定距离。