来自CoreMotion的四元数值错误?

时间:2018-12-13 08:03:19

标签: ios 3d core-motion

我正试图从四元数中得到这样的结果: https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles#Quaternion_to_Euler_Angles_Conversion

extension CMQuaternion {

    func toRoll () -> Double {
    //from Wikipedia:
    //roll (x-axis rotation)
    //double sinr_cosp = +2.0 * (q.w() * q.x() + q.y() * q.z());
    //double cosr_cosp = +1.0 - 2.0 * (q.x() * q.x() + q.y() * q.y());
    //roll = atan2(sinr_cosp, cosr_cosp);
        return atan2(2*w*x + 2*y*z, 1 - 2*y*y - 2*x*x).radiansToDegrees
    }
}

由于某些原因,这些值非常不一致。我不确定是否缺少某些东西,我的弧度到度函数是:

extension Double {
    var radiansToDegrees: Double {
        return self * 180 / .pi
    }
}

我正在从CMQuaternion获取的CMAttitude内的CMMotionManager上使用以上函数。

当设备躺在桌子上时,我只在滚动轴上滚动它,它的范围是-12到12,我希望它在-90到90的范围内。 当我将设备垂直于地面抬起时,情况变得更糟,我得到的范围在70到80度之间,并且数字出现怪异的跳跃。

0 个答案:

没有答案