因此,我正在编写一段代码,在上面的iOS 4.3中,我必须使用加速度计和陀螺仪检测不同的动作手势。
Q1:,是否有任何现有的开源代码已经实现了任何运动/手势检测?
如果不是
Q2:现在我想检测iPhone是否被丢弃。
到目前为止,我所取得的成就是:userAcceleration,(afaik)给出了 CoreMotion API,它是用户给设备的加速度,或者是设备在某个方向(x、y或z)的加速度,而不考虑重力,所以我能做的是:存储,比方说,先前的5-6个加速度参数值,可以检查它们中的任何一个是否遇到大的负值,这基本上代表了突然减速。
但是这个解决方案并不是很理想,我想我需要先检测到设备的自由落体/向下运动。知道怎么解决这个问题吗?
更新:感谢Misch分享您的方法。我根本没有想过总加速。我照你说的做了:
然而,你必须测试自己,在你的情况下,“总加速度大致相当于地球加速度”和“在一段时间内”意味着什么。
加速度值实际上是G的,所以我测试了在0.91.1范围内的“总加速度”值。在一段时间内,我检查了它们,最初,当updateInterval设置为1/20.0时,我检查了四个连续的值。就目前而言,我已经稍微放宽了神性的条件。
下面是一个示例输出:
加速度= 0.090868
加速度= 0.074473
加速度= 0.159797
加速度= 1.157513
加速度= 1.224588
加速度= 1.036272
加速度= 0.914698
加速度= 0.904093
加速度= 0.941516
加速度= 0.046362
加速度= 0.045109
加速度= 0.060045
我认为,我仍然需要继续测试和调整价值观。如果你有任何优化的想法,请分享,我知道,为了帮助你需要看到许多自由落体加速值的样本。就目前而言,我想:
发布于 2013-01-21 19:46:07
Q2:
检查大的负值并不能告诉你手机是否被丢弃。
您只需计算总加速度(a = sqrt(ax^2 + ay^2 + az^2)),并检查这个总加速度是否大致对应于地球加速度(9.81)。如果加速度与地球加速度对应一段时间,手机就会下降。
但是,您必须测试一下自己,在您的情况下,“总加速度对应于地球加速度”和“approximately在一段时间内的”是什么意思。
背后的物理学:
假设你以某种方式放下你的手机,手机的y轴向上显示。然后x和z加速度是0,y加速度是这样的:

加速度在开始时为0,然后达到-9.81,此时你释放你的手机。然后它会撞上地面,在小加速度峰值中看到,然后加速度又是零。
然而,你不能只使用y方向的加速度,因为你的手机可能会掉落在不同的角度。
所以你必须注意你手机的总加速度:

这里你不再看到负加速度了。然而,在这里,无论你的手机面向哪个方向,自由落体的特征总是以9.81的加速度为特征。
到您的编辑:
0.9 < x < 1.1,那么x是0.914698还是0.915并不重要。https://stackoverflow.com/questions/14445914
复制相似问题