如果您在将磁场 X、Y、Z 值从设备转换为全局参考系中阅读了我的答案,您仍然不明白。
A1。将旋转矩阵与设备坐标系中的磁场矢量坐标相乘,得到世界坐标系中的磁场矢量坐标。
让我强调一下:上面说的是旋转矩阵,而不是反转的旋转矩阵。
调用得到的Rotation矩阵getRotationMatrix
是基矩阵从设备基到世界基的变化。即给定任意向量v,坐标在设备坐标系中,通过旋转矩阵乘以设备坐标系中的坐标,可以得到同一向量v在世界坐标系中的坐标。
逆旋转矩阵是基矩阵从世界基到设备基的变化。因此,当您将此矩阵与坐标相乘时,它被解释为将矩阵与世界坐标系中的向量坐标相乘,以获得相同向量在设备坐标系中的坐标。因此,如果将反向旋转矩阵与磁传感器返回的磁场矢量坐标相乘。然后坐标被解释为世界坐标系中矢量的坐标,因此不代表磁场矢量,所得乘积不是世界坐标系中的磁场矢量。实际上它是一个向量在设备坐标系中的坐标。
A2。 getOrientation
仅当设备是flat时才有意义。对我来说,这只是一堆角度计算。我看看我尝试在几何上做什么,然后使用旋转矩阵来计算我想要的。例如,要计算后置摄像头指向的方向,我将其视为-z的方向(与屏幕正交的向量的相反方向)。因此,为了找到这个方向,我将-z投影到世界东西北平面并计算这个投影向量和North axis之间的角度。现在如果你这样想,那么设备的旋转不会改变-z的方向,因此投影矢量与您旋转设备时相同。如果你使用getOrientation
,那么你必须预先remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR)
要求getOrientation
给你正确的结果。
A3。getRotationMatrix
假设地磁参数是完全位于北天平面中的向量的坐标。那么位于这个平面上的任何向量都必须有x坐标等于0。这只是基本的线性代数。
A4。答案是不。要获得空间位置,您必须相对于固定坐标系表达这些向量。只有这些向量在设备坐标系中的坐标,你无法找到一个固定的基础来计算基础矩阵从设备基础到这个固定基础的变化。需要满足我上面链接中所述的两个条件才能计算基数的变化。