我正在制作一个应用程序,可以准确检查表面的平坦程度,但问题是当使用核心运动获取加速度计数据时,即使表面平坦,返回的值也不会固定。那么我如何检查表面是否平坦?
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];
}
}];
}
最佳答案
假设您还没有,请尝试使用运动图示例应用程序(在 xcode 中)。它将让您更好地了解如何使用“devicemotion”输出的组合,例如横滚、俯仰、偏航;以及陀螺仪读数。
仅依靠加速度计读数对于您的应用想法来说会很棘手(但也许并非不可能。)加速度计为您提供 G 力的测量,因此虽然“平坦”和“不那么平坦”之间存在可检测到的差异”,其他因素(例如手部移动或传统设备类型之间的差异)可能会产生太多额外噪音,无法找出可靠的算法。
关于iphone - 如何准确检查表面平整度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17904877/