我希望能够检测到 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.
}
如果检测到瞬时运动,我将如何“使用加速度数据”来计算?