如何使用 CoreMotion 在空间中获取设备方向

Tan*_*ise 5 objective-c motion device-orientation ios core-motion

我在这里有一个思考和搜索问题,但找不到好的方向……我希望开发一种算法,通过使用设备运动在 360 度图像(球状)中移动。

因此,如果用户将设备指向他面前,他将获得图像的确定原点。当他在他周围移动设备时,全景图像会随之移动。

我可以研究任何想法或来源?

感谢并祝所有使用 Swift 的人好运 :)

Kay*_*Kay 1

我发现有两种简单的方法可以实现这一点,而无需太多数学麻烦:

\n\n
    \n
  1. 使用欧拉角,即CMAttitude 的滚动属性。定义图像宽度和测量角度之间的映射,并处理 180\xc2\xb0 / -180\xc2\xb0 处的奇点。这种方法的缺点:\n
      \n
    • 当用户开始以混乱的方式移动设备时,可能会出现万向锁的危险。
    • \n
    • 这同样适用于关于全 3D 视图的可扩展性。
    • \n
  2. \n
  3. 使用CMDeviceMotion 的磁场,该磁场对万向节锁具有鲁棒性。磁力计比加速计/陀螺仪慢一点,但我认为 CoreMotion 的融合算法将提供合理的估计,因此这不是重点。这里的缺点:\n
      \n
    • 磁场并不总是可用或往往有点不精确。
    • \n
    • 将其扩展到 3D 视图可能会很麻烦。
    • \n
  4. \n
\n\n

这两种方法都应该很容易实现,因此我将从其中一种开始。如果您想要一个更复杂的解决方案,您将需要更深入地研究数学。在这种情况下,可能的解决方案是使用当前设备法线(例如,查找 iOS 设备的法线向量),将其投影到地球表面平面上,并获取圆柱全景图的角度增量。

\n\n

在这种情况下,球体投影甚至更容易,因为您可以直接使用法向量。

\n