我正在制作一个能准确检查表面平整度的应用程序,但问题是当使用核心运动来获取加速度计数据时,即使表面平坦,返回的值也不会得到修复。那么如何检查表面是否平坦?
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];
}
}];
}
答案 0 :(得分:1)
假设您还没有,请尝试使用motiongraphs示例应用程序(在xcode中)。它将让您更好地理解如何使用“devicemotion”输出的组合,例如滚动,俯仰,偏航;以及陀螺仪读数。
单独依靠加速度计读数对于您的应用理念来说会很棘手(但也许并非不可能)。加速度计可以测量G力,因此“平坦”和“不太平坦”之间存在可检测的差异,“手部移动或传统设备类型之间的差异等其他因素可能会产生太多额外噪音,以找出可靠的算法。