iPhone 三角函数用于处理方向

标签 iphone trigonometry compass-geolocation augmented-reality uiinterfaceorientation

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

最佳答案

自从我解决此类问题以来已经很长一段时间了,但如果这只是从纵向移动到横向的问题,你不能根据需要交换方位角和倾角值吗?

毕竟,它们都只是以相同方式计算的角度,而真正使它们不同的只是标签。您可能会做得更好,只需将它们标记为 angle1angle2,然后根据手机的方向在其他计算中使用其中之一。

<小时/>

更新:

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

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

关于iPhone 三角函数用于处理方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4317749/

相关文章:

iphone - 如何将 wiki 构建到 iPhone 应用程序中?

Android 指南针示例在横向模式下似乎不起作用

android - 如何提高加速度计和罗盘传感器的精度?

android - 第一个 Android 应用程序 - 如何访问指南针

c++ - VS2013 中破坏的毕达哥拉斯三角恒等式规则

javascript - 通过 tan 从比率获得度数

iphone - 按顺序使用 sqlite 数据库中的表行填充 TableView 部分

iphone - 如何将图像分享到 Facebook?

iphone - 修复了 UIPickerView 选择栏中的标签

audio - 正弦波音乐发生器