Я хочу иметь возможность определять, столкнулся ли айфон с чем-то ... лучше всего послушать гироскоп / акселерометр и оценить, насколько быстро он двигался, двигался ли он и внезапно останавливался.
На самом деле, как я могу судить о том, что устройство двинулось, а затем внезапно остановилось?
Это отличный ответ, но в обратном порядке iOS: точное определение энергии удара по выходному сигналу акселерометра - сглаживает движения, во всяком случае, я хочу обнаружить резкое движение.
Также доступны ли гироскоп и акселерометр для 3GS?
ОБНОВЛЕНО КОДОМ
Изолирование мгновенного движения от данных ускорения Если вы используете данные акселерометра для обнаружения только мгновенного движения устройства, вам необходимо отделить внезапные изменения движения от постоянного воздействия силы тяжести. Вы можете сделать это с помощью фильтра верхних частот.
В листинге 4-6 показано упрощенное вычисление фильтра верхних частот. Значения ускорения из предыдущего события сохраняются в переменных-членах acclX, 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.
}
Как бы я тогда? Использовать данные ускорения », чтобы определить, обнаружено ли мгновенное движение?