我想找到设备的方位角,当它不是FLAT到地面时。
这是一个已经存在的答案,但对我来说还不完整:
以下是这个问题的接受答案,几乎相同。 Inconsistent orientation sensor values on Android for azimuth/yaw and roll
问题:
但是在这个问题中,接受的答案给出的方位角值在-89到89之间。我想从磁北移动时计算范围0-359 degree
中的方位角值。如何在Android传感器中计算出来?
答案 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