0

我正在制作一个可以准确检查表面平整度的应用程序,但问题是当使用核心运动获取加速度计数据时,即使表面平整,返回的值也不会得到修复。那么如何检查表面是否平坦?

http://i.stack.imgur.com/nea3G.png

#define DRIFT_HZ 10
#define DRAFT_RATE 10

CMMotionManager *mManager = [CMMotionManager shareMotionManager];
if ([mManager isAccelerometerAvailable]) {
    [mManager setAccelerometerUpdateInterval:1/DRIFT_HZ];
    [mManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {

        CGPoint center = self.bubbleImageView.center;
        center.x -= accelerometerData.acceleration.y * DRAFT_RATE;

        if (CGRectContainsPoint(self.capsuleImageView.bounds, center)) {
            [self.bubbleImageView setCenter:center];
        }

    }];
}
4

1 回答 1

1

假设您还没有,请尝试使用 motiongraphs 示例应用程序(在 xcode 中)。它将让您更好地了解如何使用“设备运动”输出的组合,例如滚动、俯仰、偏航;以及陀螺仪读数。

仅依靠加速度计读数对于您的应用想法来说将是棘手的(但也许并非不可能。)加速度计为您提供 G 力的测量,因此虽然“平坦”和“不太平坦”之间存在可检测的差异,但可能是来自其他因素(例如手部运动或传统设备类型之间的差异)的额外噪声过多,无法找出可靠的算法。

于 2013-07-28T04:22:24.660 回答