【问题标题】:Compare device 3D orientation with the sun position将设备 3D 方向与太阳位置进行比较
【发布时间】:2014-01-21 00:13:00
【问题描述】:

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

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

关于如何实现这一目标的任何想法?

【问题讨论】:

  • 愿意分享您目前拥有的东西吗?这是一个增强现实应用程序,太阳的轨道路径会绘制在屏幕上,因此为什么需要检测对齐方式?
  • 我不打算绘制实际的太阳轨道,我只想在 UIView 上显示一个圆圈,当用户移动他的设备时它会四处移动。当手机对准太阳时,绘制的圆圈会更靠近屏幕中心。这在视觉上类似于 iOS7 上的气泡级别应用程序。
  • 对于 maths.stackexchange.com 上的人们来说,这似乎是一个关于 mathsplay 的好问题:P 请发布一个转发链接,以便我可以检查提交的答案,因为我有兴趣看看它会如何为你锻炼:)
  • 我终于设法让它工作了!我遇到了 Apple 代码示例“pARk”,它是一个简单的增强现实应用程序。我基本上采用了他们对相机和投影矩阵的实现,我所要做的就是以一定的顺序将这些矩阵与太阳的 3D 位置向量(从球坐标转换为笛卡尔坐标)相乘,然后我可以检索屏幕坐标。我的实现似乎运行良好,稍后我将发布更详细的答案。
  • 你做得很好。如果您还可以发布一个 github/链接到该项目,该项目仅按照您对太阳坐标的描述进行,我将不胜感激。我很想测试您的解决方案,并且当我将设备面对太阳时,能够看到您的斑点在太阳上方盘旋,并且当我在夜间向下瞄准地球时仍然显示斑点!感谢您回来,我非常期待您实施 Broco

标签: ios augmented-reality quaternions core-motion azimuth


【解决方案1】:

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

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

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

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

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

此功能的代码在我的Github 上,欢迎使用和分享!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    相关资源
    最近更新 更多