在自由落体期间,iphone 应该在所有三个轴上将加速度值发送为 0。那么如何检测iphone覆盖的距离呢?
10 回答
不要相信牛顿定律,它们会忽略空气阻力、Iphone 旋转等。改用经验方法。让设备从 1m、2m、5m、10m、30m 等几个高度跌落……每个高度重复几次。在每个秋季测量时间。样条曲线的近似结果。计算反函数。
最简单和幼稚的实现是对加速度计数据进行采样并使用以下公式。
v+=a*dt;
d+=v*dt;
但这可能会随着时间的推移而漂移,请阅读此内容以解释原因和更好的解决方案:http: //gafferongames.com/game-physics/integration-basics/
从一开始
距离 = 0.5 x 加速度 x 时间2
重力加速度 = 9.81 m/s 2
我将假设您没有将手机放下足够远以达到终端速度。如果你这样做了,我怀疑你的应用程序在你恢复手机时会有多大用处:)
如果您的加速度计报告为零,那么您将无法确定运动何时完成。
所以确定撞击时的减速度,然后确定减速开始时的最大速度,然后从这里倒推。假设直线运动,没有终端速度和空气阻力,直线减速(也许),你的手机仍然可以工作!
考虑风阻问题的一种解决方案是,您可以使用重力加速度与您正在阅读的实际加速度标准之间的差异,
d 2 x / dt 2 = g - |a|
其中 g = 9.8 和 |a| = sqrt(a 1 2 + a 2 2 + a 3 2 ) 其中 a n是来自每个轴上的加速度计的读数。
然后用类似欧拉方法的方法对微分方程进行数值求解。
您甚至可以很聪明地使用 GPS 查找 g 的本地值。
忽略空气阻力:
float t; // time since drop
float distance = 9.81f * 0.5f * t * t;
对于更远的距离(从飞机上掉下来),您还可以使用定位服务。CLLocation 包含一个高度。
另请记住,手机很可能在任何类型的跌落情况下翻滚。随着手机配置文件的变化,阻力也会发生变化,加速度计的读数不会为零。
这是非常简单的,因为您必须考虑空气摩擦。空气摩擦使设备达到“a”终端速度。只有在终端速度下,加速度计才会显示 0。
这里给出的公式假设在空隙中自由落体(无摩擦)。
换句话说,计算行进的距离是相当复杂的(一个问题是终端速度取决于手机在坠落时的方向)。
距离 = 0.5 * 重力加速度 * timeOfFall 2
以最简单的形式。
考虑到 iPhone 的外形尺寸和重量,以及硬件在坠落时仍然有用的距离,我们可以放心地忽略空气摩擦和风。;)
但是,如果您在打开降落伞之前将手机进行自由落体,则根据加速度计本身,要可靠地计算距离,需要考虑的因素太多。无论如何,它可能不适合此类应用,因为读数非常不稳定,其主要目的是确定设备的方向或检测潜在的自由落体(在使用类似加速度计芯片的笔记本电脑的情况下)。
无论是自由落体还是坐在桌子上,加速度计都将在所有 3 个轴上读取 0(或 g)。因此这个问题没有实际意义,因为如果不假设自由落体,就无法确定距离。