我目前正在开发一款必须跟踪偏航(绕z轴旋转)的应用。用户将横向放置iPhone,指向他面前的汽车等物体。当用户开始绕着物体走动时,我必须跟踪偏航以进行完整的360度旋转。我目前正在使用CoreMotion和CMQuaternion来跟踪旋转:privatefuncstartDeviceMotionUpdates(){ifmotionManager.isDeviceMotionAvailable{letqueue=OperationQueue()motionManager.deviceMotionUpdateInterval=1/60motionManager.startDeviceMo
我有一个应用程序可以记录用户在物体周围走动时的角度,同时将设备(最好)指向物体的中心。角度根据用户命令重置-因此引用姿态被重置。使用欧拉角会产生万向节锁,所以我目前正在使用四元数并以这种方式计算角度:doubleangleFromLastPosition=acos(fromLastPositionAttitude.quaternion.w)*2.0f;这提供了良好的精度,如果设备的俯仰和偏航不改变,它可以完美地工作。换句话说,当角度显示为360度时,我最终到达的位置与圆的起点相同。问题1:如果设备的偏航和俯仰略有变化(用户没有直接指向对象的中心),angleFromLastPositi
我有一个应用程序可以记录用户在物体周围走动时的角度,同时将设备(最好)指向物体的中心。角度根据用户命令重置-因此引用姿态被重置。使用欧拉角会产生万向节锁,所以我目前正在使用四元数并以这种方式计算角度:doubleangleFromLastPosition=acos(fromLastPositionAttitude.quaternion.w)*2.0f;这提供了良好的精度,如果设备的俯仰和偏航不改变,它可以完美地工作。换句话说,当角度显示为360度时,我最终到达的位置与圆的起点相同。问题1:如果设备的偏航和俯仰略有变化(用户没有直接指向对象的中心),angleFromLastPositi