ios - 将设备 3D 方向与太阳位置进行比较

标签 ios augmented-reality quaternions core-motion azimuth

我正在开发一款应用,要求用户将他的 iPhone 对准太阳才能触发特殊事件。

我可以检索基于陀螺仪和 CoreMotion 框架的设备 3D 方向四元数,由此我可以获得偏航角、滚动角和俯仰角。 我还可以根据当前日期和时间 (GMT) 以及纬度和经度计算太阳的方位角和天顶角。 接下来我要弄清楚的是如何比较这两组值(手机方向和太阳位置)以准确检测设备与太阳的对齐情况。

关于如何实现这一点有什么想法吗?

最佳答案

我终于设法解决了这个问题,

为了实现这一点,我使用了一个示例代码,该代码使用了 Apple 开发人员资源上提供的增强现实技术: pARk

这个想法首先是将太阳的球面坐标转换为笛卡尔坐标,以便将其在天空中的位置作为一个简单的向量:{x, y, z}。 该公式可在维基百科上找到:Spherical coordinates .由于与太阳的距离(球坐标系中的半径)在这里并不重要,因此我使用了 1。

使用设备陀螺仪和 CoreMotion 框架,我能够获得 iPhone 旋转矩阵。 从“park”代码示例并使用几何函数,我可以计算相机投影矩阵。我将旋转矩阵与其相乘,然后将所得矩阵与太阳的矢量坐标相乘。

这给出了一个带有太阳屏幕坐标的简单矢量。通过显示具有这些 x 和 y 值的 UIView,我终于可以在移动屏幕时看到太阳在移动。

此功能的代码可在我的 Github 上找到,请随意使用和分享!

关于ios - 将设备 3D 方向与太阳位置进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21246745/

相关文章:

javascript - window.scrollto和scrollIntoView在ios中滚动不顺畅

ios - 向可滚动的 UITextView 添加渐变背景

android - 是否可以在没有 GPS 的情况下在室内使用增强现实

math - 对齐 IMU 方向,然后获得相对旋转

python - 使用python将 Spring 物理学应用于四元数

c++ - XMMATRIX Decompose 不提供正确的比例、旋转和平移

ios - 如何快速检查对象属于类或结构

ios - 如何在 iOS7 中只为一个 Controller 隐藏状态栏?

augmented-reality - 是否可以将增强现实和眼镜与 ARCore 集成?

unity-game-engine - Hololens:如何渲染元素仅在 AR 中可见,但在混合现实捕获中不可见