我想要检测iPhone是否被撞击过... 最好监听陀螺仪/加速度计,并判断它移动的速度或者是否突然停止移动。
事实上,如果设备移动了然后突然停止,怎么判断呢?
这个答案很好,但是相反的iOS:从加速度计输出准确确定碰撞的能量 - 它平滑了运动,而我想要检测的是突然的运动。
另外,3GS手机是否同时具有陀螺仪和加速度计?
使用代码更新
从加速度数据中分离瞬时运动 如果您正在使用加速度计数据来仅检测设备的瞬时运动,则需要能够将运动的突然变化与重力的恒定影响隔离开来。您可以使用高通滤波器来做到这一点。
清单4-6显示了简化的高通滤波器计算。上一个事件中的加速度值存储在类的accelX、accelY和accelZ成员变量中。此示例计算低通滤波器值,然后从当前值中减去它以获得仅瞬时运动的分量。
清单4-6 从加速度数据获取瞬时运动部分
define kFilteringFactor 0.1
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
// Subtract the low-pass value from the current value to get a simplified high-pass filter
accelX = acceleration.x - ( (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor)) );
accelY = acceleration.y - ( (acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor)) );
accelZ = acceleration.z - ( (acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor)) );
// Use the acceleration data.
}
我该如何使用加速度数据来判断是否检测到瞬时运动?