在iPhone上计算不同设备方向的偏航角度?

时间:2013-12-25 11:09:30

标签: ios iphone sensor quaternions core-motion

在我的应用中,我需要在屏幕上显示一条水平线,所以我决定转向CMMotionManager。这是我的代码,它非常简单:

    if ([_motionManager isDeviceMotionAvailable]) {
        if ([_motionManager isDeviceMotionActive] == NO) {
            [_motionManager setDeviceMotionUpdateInterval:0.1];
            [_motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical toQueue:[NSOperationQueue currentQueue] withHandler:^(CMDeviceMotion *motion, NSError *error){
                CMQuaternion quat = _motionManager.deviceMotion.attitude.quaternion;
                double yaw = asin(2*(quat.x*quat.z - quat.w*quat.y));
                // drawing line stuff.
            }];
        }
    } else {
        NSLog(@"Motion not avaliable!");;
    }

当我将手机置于向上纵向模式时,Eveything工作正常。但由于asin方法只给我一个(-pi / 2,+ pi / 2)范围内的数字,如果我将手机保持在横向模式或上升状态,我就无法画出完美的水平线 - 在纵向模式下,线刚刚以-pi / 2或pi / 2的角度卡住,并且不会继续旋转。

那么,我该如何解决这个问题,还有更通用的方法来处理四元数吗?提前谢谢!

0 个答案:

没有答案