我正在尝试编写增强现实应用程序。我正在使用指南针、陀螺仪和 GPS 坐标来创建叠加层。一切都很好,除了用户离开纵向模式时。应该只是一个我无法弄清楚的简单触发问题。
为了确定坐标是否在视野中,我使用了在程序开始时计算的 iPhone 中心点的方位角和倾角值。方位角定义为手机朝上时的左右移动,倾斜度定义为手机朝上时的上下移动。然后,我在更新时使用陀螺仪和指南针数据更新此值。因此,如果我正确更新中心点的倾角和方位角,一切都应该正常。
问题在于,当 iPhone 旋转时,其方位角和倾角的定义相对于手机保持不变。所以倾斜度仍然被定义为直到手机的顶部,即使手机是横向的。
我尝试的是做这样的事情:
self.centerPoint.azimuth = (degToRad(angleX)*cosZ) + (degToRad(angleY)*sinZ);
self.centerPoint.inclination = (degToRad(angleY)*cosZ) + (degToRad(angleX)*sinZ);
其中 degToRad(x) 将度数转换为弧度,cosZ 和 sinZ 分别是陀螺仪 z 角的 cos 和 sin,angleX 和 angleY 是陀螺仪的 x 和 y 角。陀螺仪的 X 角度测量上下角度,Y 角度测量左右角度,Z 角度测量手机从纵向到横向的旋转。
似乎没有工作。当我将手机旋转到一边时,倾斜度急剧上升。有大佬可以帮忙吗?
我应该补充一点,当只考虑纵向时,我使用:方位角 = degToRad(angleX) 和倾角 = degToRad(angleY)。这适用于纵向。我应该只需要乘以某个因素来解释不同的角度。