我想找出设备的方位角,当它不是平坦的地面时。
这里有一个已经存在的答案,但对我来说还不完整:
这是关于这个问题的公认的答案,几乎是一样的。Inconsistent orientation sensor values on Android for azimuth/yaw and roll
问题:
但在这个问题中,公认的答案给出方位角值在范围内-89到89。当从磁北移动时,我想计算距离0-359 degree的方位角值。我怎样才能在Android传感器中计算这个数字呢?
发布于 2014-03-23 08:17:39
找到了答案:
像这样计算方位角:
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
发布于 2014-03-26 06:12:29
当设备不是平坦的,如果你想要你的指南针方向是负值的装置z轴方向(也就是你正在看的方向),那么方位角可以通过第一次调用来计算。
remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR);然后打电话
getOrientation (float[] R, float[] values)传入参数outR的参数R。
这相当于将z轴投影到世界xy平面,然后计算出这个投影和世界y轴之间的角度,它是磁北的。
当器件绕此轴旋转时,z轴点在同一方向,因此方位角不应改变。当然,由于加速,它会有一些变化。
https://stackoverflow.com/questions/22581095
复制相似问题