Обнаруживать, когда 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 показано упрощенное вычисление фильтра верхних частот. Значения ускорения из предыдущего события сохраняются в переменных-членах 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.
}

Как бы я тогда? Использовать данные ускорения », чтобы определить, обнаружено ли мгновенное движение?

7
задан Community 23 May 2017 в 12:16
поделиться