因此,我正在尝试确定手机与磁北之间的方位角。像这样:
float[] rotation = new float[9];
SensorManager.getRotationMatrix(rotation, null, lastMag, lastAcc);
float[] orientation = new float[3];
SensorManager.getOrientation(rotation, orientation);
if (System.currentTimeMillis() / 1000 - lastTime / 1000 > 0) {
Log.d("MonitorService", "Current azimuth: " + String.valueOf(orientation[0]));
lastTime = System.currentTimeMillis();
}
我正在阅读getOrientation()
的文档,发现这个方位角的定义来自orientation[0]
:
values [0]:方位角,围绕-z轴的旋转角度。该值表示设备的y轴和磁性北极之间的角度。朝北时,此角度为0,当朝南时,此角度为π。同样,当面向东方时,该角度为π/ 2,而面向西方时,该角度为-π/ 2。值的范围是-π到π。
文档清楚地指出,当Y轴指向东时,我应该看到正值,当指向西轴时,我应该看到负值。 / p>
但是,我所看到的行为恰恰相反!当我将手机的Y轴指向东方时(例如,屏幕向上,屏幕顶部指向东,或屏幕向下,屏幕顶部指向东),我会得到负方位角值!
我是否正在正确考虑?有人可以在这里解释我的逻辑错在哪里吗?
是的,我知道这里有一个相关的问题:Android getOrientation() returns azimuth, positive or negative?
但是,我认为我的问题很独特,因为: