CMMotionManager - 如何检测忽略小动作的步骤?

时间:2014-02-22 11:26:30

标签: ios game-physics cmmotionmanager

CMMotionManager 获取数据非常简单,处理的不是那么多。

对于相对准确地检测步骤(并忽略较小的移动)或指导方向,如果有关于这样的事情,是否有人有任何代码指针?

1 个答案:

答案 0 :(得分:3)

你基本上需要的是一种低通滤波器,它可以让你忽略小动作。实际上,这可以通过消除紧张情绪来“平滑”数据。

- (void)updateViewsWithFilteredAcceleration:(CMAcceleration)acceleration
{
    static CGFloat x0 = 0;
    static CGFloat y0 = 0;

    const NSTimeInterval dt = (1.0 / 20);
    const double RC = 0.3;
    const double alpha = dt / (RC + dt);

    CMAcceleration smoothed;
    smoothed.x = (alpha * acceleration.x) + (1.0 - alpha) * x0;
    smoothed.y = (alpha * acceleration.y) + (1.0 - alpha) * y0;

    [self updateViewsWithAcceleration:smoothed];

    x0 = smoothed.x;
    y0 = smoothed.y;
}

alpha值确定给出先前数据与原始数据的权重。 dt是样本之间经过的时间。 RC值控制过滤器的侵略性。值越大意味着输出越平滑。