gpt4 book ai didi

ios - 使用 CMQuaternion 计算偏航

转载 作者:搜寻专家 更新时间:2023-10-31 23:09:47 27 4
gpt4 key购买 nike

我目前正在开发一款必须跟踪偏航(绕 z 轴旋转)的应用。用户将横向放置 iPhone,指向他面前的汽车等物体。当用户开始绕着物体走动时,我必须跟踪偏航以进行完整的 360 度旋转。

我目前正在使用 CoreMotion 和 CMQuaternion 来跟踪旋转:

private func startDeviceMotionUpdates() {
if motionManager.isDeviceMotionAvailable {
let queue = OperationQueue()
motionManager.deviceMotionUpdateInterval = 1 / 60
motionManager.startDeviceMotionUpdates(using: .xArbitraryZVertical, to: queue, withHandler: { (motion, error) in
guard let motion = motion else { return }

let quat = motion.attitude.quaternion
let yaw = 2 * (quat.x * quat.y + quat.w * quat.z)
let yawDegrees = self.degreesFromRadians(yaw)
print(yawDegrees)
})
}
}

private func stopDeviceMotionUpdates() {
motionManager.stopDeviceMotionUpdates()
}

private func degreesFromRadians(_ radians: Double) -> Double {
return radians * 180 / .pi
}

只要设备的滚动或俯仰不变,这目前就可以正常工作。

我想知道的是:

  1. 为什么当设备的横滚或俯仰改变时偏航会改变?
  2. 如何在不受 x 轴和 y 轴变化影响的情况下准确跟踪 z 轴周围的偏航?

我已经为这个问题苦苦思索了两周。如果有人能帮助我理解为什么会发生这种情况以及如何解决它,我将不胜感激。

最佳答案

试试下面的代码。

let yaw = atan2(motion.gravity.x, motion.gravity.y) - Double.pi
let yawDegrees = self.degreesFromRadians(yaw)
print(yawDegrees)

关于ios - 使用 CMQuaternion 计算偏航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44166214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com