我正在尝试编写一个增强现实应用程序。我正在使用指南针,陀螺仪和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)。这适用于肖像定位。我只需把它乘以一些因素,就可以解释不同的角度了。
发布于 2010-11-30 13:04:48
我已经很久没有解决这类问题了,但如果这只是一个从肖像到风景的问题,你就不能根据需要交换方位和倾斜值吗?
毕竟,它们都只是用相同的方法计算出来的角度,只有标签才真正使它们与众不同。您可能会做得更好,只需将它们标记为angle1
和angle2
,然后在基于手机方向的其他计算中使用其中一种。
更新:
再看一遍,我认为你的问题是你用错了传感器。陀螺仪数据返回弧度/秒,是你不想要的旋转速度的度量。
相反,我认为您需要使用CMAttitude提供的态度测量。CMAttitude类提供滚动、俯仰和偏航的数据,这将允许您计算设备的物理方向。multiplyByInverseOfAttitude:
方法看起来将在任意两个样本之间提供设备方向的变化。
https://stackoverflow.com/questions/4317749
复制相似问题