当设备没有接地时找到方位角值 - Android?

时间:2014-03-22 17:32:34

标签: java android android-sensors android-orientation device-orientation

我想找到设备的方位角,当它不是FLAT到地面时。

这是一个已经存在的答案,但对我来说还不完整:

以下是这个问题的接受答案,几乎相同。 Inconsistent orientation sensor values on Android for azimuth/yaw and roll

问题:

但是在这个问题中,接受的答案给出的方位角值在-89到89之间。我想从磁北移动时计算范围0-359 degree中的方位角值。如何在Android传感器中计算出来?

2 个答案:

答案 0 :(得分:2)

当设备不平坦且您希望指南针方向为设备z轴方向的负值(即您正在查看的方向)时,方位角可以通过第一次调用来计算

remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR);

然后致电

getOrientation (float[] R, float[] values)

传递outR参数R

此量用于将z轴投影到World xy平面,然后计算此投影与世界y轴(磁北)之间的角度。

当设备围绕该轴旋转时,z轴指向相同方向,因此方位角不应改变。当然,由于加速,它会有所不同。

答案 1 :(得分:0)

找到答案:

像这样计算方位角:

mAzimuthAngleNotFlat = (int) Math.toDegrees(Math
                    .atan2((rotationMatrix[1] - rotationMatrix[3]), (rotationMatrix[0] + rotationMatrix[4])));

要将其转换为0到359,只需应用此选项:

    if (mAzimuthAngleNotFlat < 0) {
        mAzimuthAngleNotFlat += 360;
    }

然后你就完成了。当设备不平坦时,此角度将是准确的。更多信息,您可以看到有关已接受答案的讨论。

Inconsistent orientation sensor values on Android for azimuth/yaw and roll