所以我一直在研究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);
我从general rotations的公式中得到了这些公式(因为它正在旋转一个单位向量,你可以选择中心列)。我认为变量Py的组件将是 x , y 和 z 投影到 Py ,但我有倒退吗?是否将 Py 投影到三个真实轴中的每一个上?
最后,我注意到有一个getRotationMatrixFromVector()选项,它看起来像是为你计算这些预测,但我又不确定我是否完全倒退了。如果我想知道 x 的三个预测。 y 和 z 到 Py ,我是否会获得旋转矩阵的第二列或第二行?
(对不起,这可能是一个非常简单的问题的罗嗦版本,我认为对于未来困惑的人来说,更好地了解坐标系,这是我的主要困惑点。)