iOS设备的屏幕磁极方向是根据最大倾angular?

好吧,我不认为这个问题已经被问及,或者我的答案更快,或者一旦有了答案,我就会添加答案,因为我必须接近答案。

让我解释:

考虑iOS设备的俯仰和滚动(忘记偏航),我们有这样的angular度

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

所以基于身体的参考框架。

我们知道,当俯仰或滚转为0时,另一个是设备的最大倾angular。 但是当这个装置有倾斜的时候,我们需要去四元数,下面的答案会使我们屏幕正常。 https://stackoverflow.com/a/10836923/2332101

具有垂直参考vector的法向量将给我们最大的倾斜度。

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

在这个例子中:

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

所以在上面的例子中,我们知道它是CLHeading.magneticHeading + 90°,但是我不想像我那样走下去。 我想使用所有提供的聪明的API在math上做。

IT很简单,但是我尝试了很多select而没有成功。

请帮我弄清楚我在想什么错了!

所以这里是答案:

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

  1. 将垂直向量乘以正常值得到基于右手规则的水平向量。
  2. 再次将结果与法线相乘,会给我们最大倾向的方向。
  3. 使用atan函数并给出atan2(finalVector.y,finalVector.x),因为我们知道x轴指向北方。

完成!

问题是这两个方法为什么给出不同的读数? 这是从核心位置框架的CLHeading和核心运动的CMAttitude工作略有不同的结果,或者我正在做一些马虎?

谢谢