Я согласен с ответом Али относительно ускорения, но не при броске. Но в любом случае имейте в виду, что приложение, которое заставляет пользователей бросать свои iPhone, не будет иметь больших шансов получить одобрение магазина приложений, -)
у быть в состоянии определить, не столкнулся ли 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.
}
Как мне тогда «использовать данные ускорения», чтобы определить, обнаружено ли мгновенное движение?