好的,我不认为这个问题已经被问过了,现在是我更快地得到答案的时候了,或者我会在我得到答案后添加答案,因为我必须接近。
让我解释一下:
考虑到 iOS 设备的俯仰和滚动(忘记偏航),我们有这样的角度
* r+
* ------------
* | |
* p- ° |p+
* | |
* ------------
* r-
所以基于 body 引用系。
我们知道,当俯仰或滚动为 0 时,另一个是设备的最大倾角。但是当设备在滚动和俯仰方面都有倾斜时,我们需要使用四元数,下面的答案将使我们的屏幕正常。
https://stackoverflow.com/a/10836923/2332101
带有垂直引用向量的法线向量将为我们提供最大倾角。
因此,为了获得投影在水平面上的法线向量,CLHeading 中提供了航向方向,CLHeading 的 x 之间的角度(称为 x 轴,因为它是 iOS 主体框架坐标)应该给我们正确的磁航向(忘记真正的航向)。
在这个例子中:
*
* ------------
* | |
* ° |-> (magnetic heading)
* | |
* -----|------
* v (max inclination example where p = 0)
所以在上面的例子中,我们知道它是 CLHeading.magneticHeading + 90°,但我不想像以前那样沿着这条路线走。我想使用提供的所有聪明的 API 以数学方式完成它。
IT 就是这么简单,但我尝试了很多选择都没有成功。
请帮助我找出我的想法错误的地方!
Best Answer-推荐答案 strong>
答案如下:
从问题中提到的正常情况:
- 将垂直向量与法线相乘,我们得到一个基于右手定则的水平向量。
- 再次将结果与法线相乘,将为我们提供最大倾角的方向。
- 使用 atan 函数并赋予它 atan2(finalVector.y,finalVector.x) 因为我们知道 x 轴指向北方。
完成!
问题是:为什么这两种方法给出不同的读数?这是从 Core Location Framework 的 CLHeading 和 Core Motion 的 CMAttitude 工作的结果略有不同,还是我做的有些马虎?
谢谢
关于基于最大倾角的iOS设备屏幕磁方向?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/21331128/
|