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.
}
瞬間的な動きが検出された場合、「加速度データを使用」してどのように解決しますか?