因此,我一直在研究SensorEvent文档,试图了解如何确定相对于手机给定轴的北方向。我画了一张小图来说明我对坐标系如何工作的概念:
因此,如果世界坐标是x、y和z,其中磁北沿z并且y指向天空,而手机的坐标是Px、Py和Pz,那么我希望能够计算投影每个向量到另一个向量。
看起来 SENSOR_TYPE_ROTATION_VECTOR 可能是正确的选择,但似乎这并没有给我足够的信息来获得所有这些预测。我是否应该标准化 ROTATION_VECTOR 并将其添加到我关心的轴上,然后拉出组件?
另一个大的单个传感器似乎是 SENSOR_TYPE_ORIENTATION,但我也不清楚如何处理这些值。如果我想知道真实世界坐标系在Py上的三个投影,我是否只需沿给定坐标旋转 [0, 1, 0] ,如下所示:
// Assume here that I've received values
// and broken them out into
// a = azimuth
// p = pitch
// r = roll
// Convert to radians
a = a*Math.Pi/180;
p = p*Math.PI/180;
r = r*Math.PI/180;
// Given that Py is initially 0, 1, 0, apply general rotation matrix:
float[] Py = new float[3];
Py[0] = -Math.cos(p)*Math.sin(a) + Math.sin(p)*Math.sin(r)*Math.cos(a);
Py[1] = Math.cos(p)*Math.cos(a) + Math.sin(p)*Math.sin(r)*Math.sin(a);
Py[2] = Math.sin(p)*Math.cos(a);
我刚刚从通用旋转公式中获得了这些公式(因为它正在旋转单位向量,所以您只需选择中心列)。我认为变量 Py 的组成部分将是x,y和z到Py的投影,但我有倒退吗?相反,它是Py在三个现实世界轴上的投影吗?
最后,我注意到有一个 getRotationMatrixFromVector() 选项,它似乎为你计算了这些预测,但我再次不确定我是否有完全倒退的情况。如果我想知道x的三个投影。y和z到Py上,我得到旋转矩阵的第二列还是第二行?
(对于可能是一个非常简单的问题的非常冗长的版本,我认为对于未来困惑的人来说,对坐标系非常明确会更好,这是我的主要困惑点)。