Все еще в книге разработчиков BigNerdRanch для iOS.
В главе «Акселерометр» сначала реализовано отслеживание акселерометра, но оно довольно нервное. Затем они предлагают применить к нему фильтр нижних частот, изменив исходный код:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
HypnosisView *hv = (HypnosisView *)[self view];
[hv setXShift:10.0 * [acceleration x]];
[hv setYShift:10.0 * [acceleration y]];
[hv setNeedsDisplay];
}
к этому:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
HypnosisView *hv = (HypnosisView *)[self view];
float xShift = [hv xShift] * 0.8 + [accel x] * 2.0;
float yShift = [hv yShift] * 0.8 + [accel y] * 2.0;
[hv setXShift:xShift];
[hv setYShift:yShift];
[hv setNeedsDisplay];
}
Довольно простой вопрос: откуда они берут эти значения? Я просматривал документацию и нашел кое-что о фильтрах нижних частот, которые предлагают следующий код:
#define kFilteringFactor 0.1
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
// Use a basic low-pass filter to keep only the gravity component of each axis.
accelX = (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor));
accelY = (acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor));
accelZ = (acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor));
// Use the acceleration data.
}
Тем не менее, я сначала попытался с этим кодом, и я получил ошибку (анализируя мое приложение), говоря, что «левое значение« * »является мусорным значением». Мое отслеживание акселерометра также не работало
Я не совсем понимаю, что означают эти значения. Например, в первой части кода, почему они умножают значения ускорения на 10? Чтобы получить «большее» движение? Я мог бы в этом разобраться, но второй код с фильтром нижних частот не имеет для меня никакого смысла.