我一直在尝试CMDeviceMotion,尤其是使用startDeviceMotionUpdatesUsingReferenceFrame。这在我看来不正确的磁场值。CMDeviceMotion的MagneticField属性不正确?
例如,如果我做的:
CMDeviceMotion *manager = [[CMDeviceMotion alloc] init];
manager.deviceMotionUpdateInterval = 0.1;
[manager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical toQueue:queue withHandler:^(CMDeviceMotion *motion, NSError *error) {
CMMagneticField fld = motion.magneticField.field;
NSLog(@"%5.1f %5.1f %5.1f", fld.x, fld.y, fld.z);
[self handleDeviceMotion:manager.deviceMotion];
}];
它示出了具有大小约50磁感应强度矢量,但几乎与重力对齐。也就是说,当设备平躺在桌子上时,x和y接近零,z接近-50,与我如何旋转设备无关。
这50个地球磁场的大小是正确的(根据Wikipedia应该在25到65微特斯拉之间),但是矢量的方向似乎都是错误的。我想知道是否:
- 这是什么奇怪我的位置只(斯德哥尔摩,瑞典),或
- 的磁感应强度属性显示剩余磁场没有地球磁场,或
- 这是错误
您是否有与磁场属性相似的经历?
至少部分您的问题,[文档](http://developer.apple.com/library/ios/DOCUMENTATION/CoreMotion/Reference/CMDeviceMotion_Class/Reference/Reference.html#//apple_ref/occ/ instp/CMDeviceMotion/magneticField)是你的朋友:“...给你设备附近的总磁场,没有设备偏差......这些值反映了地球的磁场加周围场,减去设备偏差。” – rickster 2012-03-26 16:31:22
是的,但真实的行为似乎不是根据文档... – fishinear 2012-03-26 16:36:07
你的问题启发我玩磁力计一些我自己...我试过这个代码(不使用你的答案参考框架,因为我对设备相关的领域方向感兴趣),但我看到的只有<0,0,0>。我错过了那些不在你节选内容的东西吗? – rickster 2012-03-30 21:00:05