在目标c中将设备方向转换为世界框架

时间:2010-10-15 15:05:14

标签: iphone objective-c

我想将iPhone的偏航,俯仰和滚动从车身框架转换为世界框架,即方位角,俯仰和滚动。在Android上,这很容易用 SensorManager.remapCoordinateSystem(),SensorManager.getOrientation方法详见此处:http://blog.mysticlakesoftware.com/2009/07/sensor-accelerometer-magnetics.html

类似的方法是否可用于iPhone,或者有人能指出我正确的方向如何进行此转换?

由于

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

加速度计(UIAccelerometer)将直接向设备的加速度计芯片提供矢量。如果您可以假设设备保持相当稳定(,您没有从实际移动中读取加速度),那么您可以使用简单的trig(acos(),asin())来确定设备的方向。

如果您担心设备可能正在移动,您可以等待连续几个加速度计读数几乎相同。您还可以从1.0

过滤出长度为±TOLERANCE(如您所定义)的任何向量

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

答案 2 :(得分:0)

如果您的目标是使用陀螺仪(写作时为iPhone 4),CoreMotion框架的CMMotionManager可以为您提供CMDeviceMotion更新。该框架可以很好地处理原始传感器数据并为您分离gravityuserAcceleration。你对重力矢量感兴趣,它可以用一点触发定义俯仰和滚动。要添加偏航(设备围绕重力矢量旋转),您还需要使用CoreLocation框架的CLLocationManager来获取罗盘标题更新。