iOS设备屏幕磁方向基于最大倾斜度?

时间:2014-01-24 11:09:55

标签: ios gyroscope core-motion

好的,我不认为这个问题已经被问及它的时间要么我得到更快的回答,要么我会在得到答案之后添加答案,因为我必须接近。

让我解释一下:

考虑到iOS设备俯仰和滚动(忘记偏航)我们的角度就是这个

 *         r+
 *    ------------
 *    |           |
 * p- °           |p+
 *    |           |
 *    ------------
 *         r-

所以基于身体参考框架。

我们知道,当音高或滚动为0时,另一个是设备的最大倾角。但是当设备在滚动和俯仰方面都倾斜时,我们需要去Quaternion,以下答案将使屏幕正常。 https://stackoverflow.com/a/10836923/2332101

具有垂直参考向量的法向量将给出最大倾角。

因此,为了获得在CLHeading中提供的标题方向投影在水平面上的法线向量,(称为x轴,因为它是iOS主体框架坐标)和CLHeading的x之间的角度应该给我们正确的磁航向(忘记真正的航向)。

就是在这个例子中:

 *         
 *    ------------
 *    |           |
 *    °           |-> (magnetic heading)
 *    |           |
 *    -----|------
 *         v (max inclination example where p = 0)

所以在上面的例子中,我们知道它是CLHeading.magneticHeading + 90°,但我不想像往常那样沿着这条路走下去。我希望使用所提供的所有聪明的API以数学方式进行。

IT很简单,但我已经尝试了大量的选择而没有成功。

请帮我找出错误的方法!

1 个答案:

答案 0 :(得分:1)

所以这就是答案:

从问题中提到的正常情况来看:

  1. 将垂直向量与法线相乘,我们得到一个基于右手定则的水平向量。
  2. 再次将结果与法线相乘,将给出最大倾角的方向。
  3. 使用atan函数并给它atan2(finalVector.y,finalVector.x),因为我们知道x轴指向北方。
  4. 完成!

    问题是:为什么这两种方法会给出不同的读数?这是从核心位置框架的CLHeading和Core Motion的CMAttitude得到的结果略有不同,或者我正在做一些草率的事情?

    由于