Я хочу быть в состоянии обнаружить, столкнулся ли iphone с чем-то ... было бы лучше слушать гироскоп / акселерометр и судить, насколько быстро он перемещался или если он перемещался и внезапно останавливался.
На самом деле, как бы я оценил, если устройство переместилось, а затем внезапно остановилось?
Этот ответ великолепен, но в обратном порядке. iOS: точное определение энергии удара по выходному сигналу акселерометра - он сглаживает движение, если я хочу обнаружить резкое движение.
Также доступны ли гироскоп и акселерометр для 3GS?
ОБНОВЛЕНО С КОДОМ
Из документа Apple http://developer.apple.com/library/iOS/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MotionEvents/MotionEvents.html#//apple_ref/doc/uid/TP40009541-CH4-SW26
Изоляция мгновенного движения от данных ускорения
Если вы используете данные акселерометра для определения только мгновенного движения устройства, вы должны быть в состоянии изолировать внезапные изменения в движении от постоянного влияния силы тяжести. Вы можете сделать это с помощью фильтра верхних частот.
В листинге 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.
}
Как мне тогда использовать данные ускорения, чтобы определить, обнаружено ли мгновенное движение?