OGeek|极客世界-中国程序员成长平台

标题: 基于最大倾角的iOS设备屏幕磁方向? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 18:16
标题: 基于最大倾角的iOS设备屏幕磁方向?

好的,我不认为这个问题已经被问过了,现在是我更快地得到答案的时候了,或者我会在我得到答案后添加答案,因为我必须接近。

让我解释一下:

考虑到 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-推荐答案


答案如下:

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

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

完成!

问题是:为什么这两种方法给出不同的读数?这是从 Core Location Framework 的 CLHeading 和 Core Motion 的 CMAttitude 工作的结果略有不同,还是我做的有些马虎?

谢谢

关于基于最大倾角的iOS设备屏幕磁方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21331128/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4