Фильтрация показаний компаса

Я использую направление по компасу для поворота MKMapView. Вращение было немного резким, поэтому я м пытаюсь отфильтровать его, как это делают Карты Google на iphone (или, кажется, проделывает некоторую уловку).

Я пытаюсь отфильтровать показания компаса iphone, используя формулу скользящего среднего, но это не удается на кроссовере между 359 и n 0 потому что он начинает усреднять назад от 35x до 0 и заставляет карту вращаться назад по мере приближения к северу с запада.

Любые идеи, как лучше всего отфильтровать эти данные, чтобы они пересекались от 359 до нуля и поддерживать скользящее среднее.

Код здесь:

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
static float xd=0;
static float k = 0.22;

// Moving average formula
xd = k * xd + (1.0 - k) * newHeading.magneticHeading;

NSLog(@"%0.2f : %0.2f", newHeading.magneticHeading, xd);    
[map setTransform:CGAffineTransformMakeRotation((-1 * xd * M_PI) /180)];}

Спасибо за любую помощь

5
задан d0n13 18 March 2011 в 11:39
поделиться