3

我正在尝试编写增强现实应用程序。我正在使用指南针、陀螺仪和 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)。这适用于纵向。我应该只需要乘以某个因素来解释不同的角度。

4

1 回答 1

0

我已经很久没有解决这种问题了,但如果只是从纵向移动到横向的问题,你不能根据需要交换方位角和倾角值吗?

毕竟,它们都是以相同方式计算的角度,只有标签才真正使它们不同。您最好只标记它们angle1angle2然后根据手机的方向在其他计算中使用其中一个或另一个。


更新:

再看一遍,我认为您的问题是您使用了错误的传感器。陀螺仪数据返回弧度/秒,是您不想要的旋转速率的量度。

相反,我认为您需要使用CMAttitude提供的姿态测量。CMAttitude 类提供滚动、俯仰和偏航的数据,这将允许您计算设备的物理方向。该方法multiplyByInverseOfAttitude:看起来将提供任何两个样本之间的设备方向变化。

于 2010-11-30T21:04:48.217 回答