Iphone 在objective c中将设备方向转换为世界框架

Iphone 在objective c中将设备方向转换为世界框架,iphone,objective-c,Iphone,Objective C,我想将iPhone的偏航、俯仰和滚动从机身框架转换为世界框架,即方位角、俯仰和滚动。在Android上,使用 SensorManager.remapCoordinateSystem(),SensorManager.getOrientation方法如下所述: iPhone是否也有类似的方法,或者有人能为我指出正确的方向如何进行这种转换 谢谢加速计(UIAccelerator)将直接从设备的加速计芯片上为您提供矢量。如果您可以假设设备保持相当稳定(即,您没有从实际运动中读取加速度),则可以使用简单触

我想将iPhone的偏航、俯仰和滚动从机身框架转换为世界框架,即方位角、俯仰和滚动。在Android上,使用 SensorManager.remapCoordinateSystem(),SensorManager.getOrientation方法如下所述:

iPhone是否也有类似的方法,或者有人能为我指出正确的方向如何进行这种转换

谢谢

加速计(
UIAccelerator
)将直接从设备的加速计芯片上为您提供矢量。如果您可以假设设备保持相当稳定(即,您没有从实际运动中读取加速度),则可以使用简单触发器(acos(),asin())来确定设备的方向

如果您担心设备可能正在移动,可以连续等待几个几乎相同的加速度计读数。您还可以过滤掉长度为±公差(定义为)1.0的任何向量


更一般地说,除了通过加速计“感觉重力”之外,设备无法知道其方向。您将面临的挑战集中在加速计感受到所有加速度这一事实上,其中重力只是一个可能的来源。

加速计足够好,可以在设备坐标系中获得重力方向向量。这是在设备平静下来的情况下

完整设备定向的下一步是使用
CLLocationManager
,并在设备坐标系中获得真北向量。
使用标准化的真北矢量和重力矢量,您可以使用点矢量和交叉矢量产品轻松获得所有其他方向。

如果您的目标设备带有陀螺仪(撰写本文时为iPhone 4),CoreMotion framework的
CMMotionManager
可以为您提供
CMDeviceMotion
更新。该框架能够很好地处理原始传感器数据,并为您分离
gravity
userAcceleration
。你感兴趣的是重力向量,它可以通过一点三角来定义俯仰和滚动。要添加偏航(设备围绕重力向量旋转),还需要使用CoreLocation框架的CLLocationManager来获取指南针航向更新