gpt4 book ai didi

iphone - 过滤罗盘读数

转载 作者:行者123 更新时间:2023-12-03 18:56:39 25 4
gpt4 key购买 nike

我正在使用罗盘标题来旋转 MKMapView。旋转有点不稳定,所以我试图像 iPhone 上的 Google map 一样过滤它(或者似乎做了一些欺骗)。

我尝试使用移动平均公式过滤 iPhone 指南针的读数,但在 359 和 0 之间的交叉处失败,因为它开始从 35x 向后平均到 0,并导致 map 在接近时向后旋转从西向北。

有什么想法最好的方法是过滤这些数据,使其从 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)];}

感谢您的帮助

最佳答案

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)heading
{
int newHeading;
int queuecount;

newHeading = heading.trueHeading;
[queue addObject:[NSNumber numberWithInt:newHeading]];

if([queue count] > 10) [queue removeObjectAtIndex:0];
queuecount = [queue count];

NSEnumerator *e = [queue objectEnumerator];
NSNumber *sum;
int oldd = 0 , newd, average =0;
BOOL firstLoop = YES;
while ((sum = [e nextObject]))
{
newd = [sum intValue];
if(firstLoop) {oldd = newd;firstLoop=NO;}

if((newd +180) < oldd)
{
newd +=360; oldd = newd;
average = average + newd;
continue;
}
if((newd - 180) > oldd)
{
newd -=360;oldd = newd;
average = average + newd;
continue;
}

average = average + newd;
oldd = newd;

}
average = (average / queuecount) % 360;

[map setTransform:CGAffineTransformMakeRotation((-1 * average * M_PI) /180)];

}

关于iphone - 过滤罗盘读数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5347653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com