使用 Core Motion 准确跟踪用户围绕对象旋转的度数
Accurately track users rotation in degrees around an object using Core Motion
我目前正在尝试准确跟踪用户围绕物体(例如汽车)的运动度数。
用户在汽车周围移动时,他的 iPhone 将处于横向。我想为用户围绕汽车旋转的每一度拍摄一张照片。
我目前正在使用 CoreMotion
来尝试确定 Yaw
。
let queue = OperationQueue.main
motionManager.deviceMotionUpdateInterval = 1 / 30
motionManager.startDeviceMotionUpdates(using: .xArbitraryZVertical, to: queue) { (motion, error) in
if let deviceMotion = motion {
let quat = deviceMotion.attitude.quaternion
let ysqr = quat.y * quat.y
let t3 = 2.0 * (quat.w * quat.z + quat.x * quat.y)
let t4 = 1.0 - 2.0 * (ysqr + quat.z * quat.z)
let yaw = atan2(t3, t4)
print(round(self.degrees(yaw)))
}
}
我注意到当我在对象周围移动时,当设备 Pitch
或 Roll
发生变化时 Yaw
会受到影响。
有什么方法可以准确地跟踪Yaw
围绕一个物体360度旋转吗?
您可能想要查看的是使用 CoreLocation
(特别是 CLLocationManager
和 startUpdatingHeading
)获取设备的航向。
获取设备的当前航向更加可靠,更新速度非常快。
我目前正在尝试准确跟踪用户围绕物体(例如汽车)的运动度数。
用户在汽车周围移动时,他的 iPhone 将处于横向。我想为用户围绕汽车旋转的每一度拍摄一张照片。
我目前正在使用 CoreMotion
来尝试确定 Yaw
。
let queue = OperationQueue.main
motionManager.deviceMotionUpdateInterval = 1 / 30
motionManager.startDeviceMotionUpdates(using: .xArbitraryZVertical, to: queue) { (motion, error) in
if let deviceMotion = motion {
let quat = deviceMotion.attitude.quaternion
let ysqr = quat.y * quat.y
let t3 = 2.0 * (quat.w * quat.z + quat.x * quat.y)
let t4 = 1.0 - 2.0 * (ysqr + quat.z * quat.z)
let yaw = atan2(t3, t4)
print(round(self.degrees(yaw)))
}
}
我注意到当我在对象周围移动时,当设备 Pitch
或 Roll
发生变化时 Yaw
会受到影响。
有什么方法可以准确地跟踪Yaw
围绕一个物体360度旋转吗?
您可能想要查看的是使用 CoreLocation
(特别是 CLLocationManager
和 startUpdatingHeading
)获取设备的航向。
获取设备的当前航向更加可靠,更新速度非常快。