将设备的三维方向与太阳位置进行比较。

5
我正在开发一个应用程序,需要用户将iPhone对准太阳以触发特殊事件。
我可以通过陀螺仪和CoreMotion框架获取设备的3D方向四元数,从中可以得到偏航、横滚和俯仰角度。同时,我还可以根据当前日期和时间(GMT)以及纬度和经度计算出太阳的方位角和天顶角。
接下来,我想要解决的问题是如何比较这两组值(手机方向和太阳位置),以准确检测设备与太阳的对准情况。
你有任何想法吗?

这似乎是一个很棒的数学问题,适合在maths.stackexchange.com上提问。请发布一个转发链接,以便我可以查看提交的答案,因为我很感兴趣看看它对你有什么帮助 :) - Pavan
1
我终于成功了!我发现了苹果的代码示例'pARk',这是一个简单的增强现实应用程序。我基本上采用了他们的相机和投影矩阵的实现,我所要做的就是按照一定的顺序将这些矩阵与太阳的三维位置向量(从球坐标转换为笛卡尔坐标)相乘,然后我就可以检索屏幕坐标了。我的实现似乎运行得非常好,我会稍后发布一个更详细的答案。 - Broco
你这样做真是太好了。如果您能够发布一个简单描述太阳坐标的项目的github /链接,我将不胜感激。我很想测试您的解决方案,并在将设备对准太阳时看到您的blob悬停在太阳上,并且在晚上将设备指向地球时仍然显示blob!感谢您的回复,我真诚期待您的实现,Broco。 - Pavan
也就是说,我同意,只要有一个小项目可以突出我们在评论中讨论的内容就足够了。你提到你受到NDA限制?哈哈,伙计,你使用了哪些功能使你受到NDA限制?我也是一名持牌开发人员,但我看不到下一个版本中可能会在你的项目中使用的任何功能,这将使你受到NDA限制。有没有一些即将推出的功能链接对你的项目有重大影响?请原谅我的好奇心。也许一个链接,我可以登录我的开发帐户。 - Pavan
啊哈,不是苹果的保密协议,只是我正在为其构建应用程序的客户的要求...显然,由于可能包含敏感数据,我不能分享整个应用程序。但是如果我有时间,明天应该可以在Github上分享代码示例 :) - Broco
显示剩余6条评论
1个回答

6

我最终成功解决了这个问题。

为此,我使用了一个在苹果开发者资源中提供的增强现实示例代码:pARk

首先要做的是把太阳的球面坐标转换成笛卡尔坐标,以获得其在天空中的位置,即一个简单的向量:{x,y,z}。 公式可在维基百科上找到:球面坐标。由于这里与太阳的距离(球面坐标中的半径)无关,因此我使用了1。

然后,我使用设备陀螺仪和CoreMotion框架来获取iPhone的旋转矩阵。通过“pARk”代码示例和使用几何函数,我可以计算相机投影矩阵。我将旋转矩阵与其相乘,然后将结果矩阵与太阳的向量坐标相乘。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接