Java 当设备不与地面平齐时查找方位角值-Android?
我想找到设备的方位角,当它不是平坦的地面 这里有一个已经存在但不完整的答案:Java 当设备不与地面平齐时查找方位角值-Android?,java,android,android-sensors,android-orientation,device-orientation,Java,Android,Android Sensors,Android Orientation,Device Orientation,我想找到设备的方位角,当它不是平坦的地面 这里有一个已经存在但不完整的答案: mAzimuthAngleNotFlat = (int) Math.toDegrees(Math .atan2((rotationMatrix[1] - rotationMatrix[3]), (rotationMatrix[0] + rotationMatrix[4]))); if (mAzimuthAngleNotFlat < 0) { mAz
mAzimuthAngleNotFlat = (int) Math.toDegrees(Math
.atan2((rotationMatrix[1] - rotationMatrix[3]), (rotationMatrix[0] + rotationMatrix[4])));
if (mAzimuthAngleNotFlat < 0) {
mAzimuthAngleNotFlat += 360;
}
这是关于这个问题的公认答案,几乎相同
问题:
mAzimuthAngleNotFlat = (int) Math.toDegrees(Math
.atan2((rotationMatrix[1] - rotationMatrix[3]), (rotationMatrix[0] + rotationMatrix[4])));
if (mAzimuthAngleNotFlat < 0) {
mAzimuthAngleNotFlat += 360;
}
但在这个问题上,公认的答案给出的方位角值在-89到89之间。我想计算距离0-359度
的方位角值,当从磁北移动时。在Android传感器中,我如何计算它呢?找到了答案:
像这样计算方位角:
mAzimuthAngleNotFlat = (int) Math.toDegrees(Math
.atan2((rotationMatrix[1] - rotationMatrix[3]), (rotationMatrix[0] + rotationMatrix[4])));
if (mAzimuthAngleNotFlat < 0) {
mAzimuthAngleNotFlat += 360;
}
要将其转换为0到359,只需应用以下命令:
mAzimuthAngleNotFlat = (int) Math.toDegrees(Math
.atan2((rotationMatrix[1] - rotationMatrix[3]), (rotationMatrix[0] + rotationMatrix[4])));
if (mAzimuthAngleNotFlat < 0) {
mAzimuthAngleNotFlat += 360;
}
if(mAzimuthAngleNotFlat<0){
mAzimuthAngleNotFlat+=360;
}
那你就完了。当设备不平坦时,这个角度将是准确的。有关更多信息,请参阅关于已接受答案的讨论
当设备不平坦时,如果您希望您的指南针方向与设备z轴方向(即您正在查看的方向)相反,则可以通过第一次调用来计算方位角
remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR);
然后打电话
getOrientation (float[] R, float[] values)
为参数R
传入outR
这相当于将z轴投影到世界xy平面,然后计算此投影与世界y轴(磁北)之间的角度
当设备围绕z轴旋转时,z轴指向同一方向,因此方位角不应改变。当然,它会因加速度而略有变化。当设备不平坦时,您想做什么?你想得到什么方向?这算什么?我把它放在我的代码里,垂直握住手机,开始绕z轴旋转,mAzimuthAngleNotFlat值会发生剧烈变化。例如,最初的角度是260度,顺时针旋转90度,得到360度左右,当保持旋转时,该值保持基本不变,或者变为<90度,当手机倒置时,该值突然变为270度左右。如果一致,则应为90。如果值介于-89和89之间,如何通过添加360来获得91-269范围内的值?当设备不平坦时,它会计算方位角。方位角是什么?你感兴趣的关于磁北的方向是什么?这就是你想要的吗?用户甚至不能稍微旋转手机?你似乎不明白我在说什么,你应该看看我的答案,谢谢你的回答。在接受之前,让我实现并测试它;我将在方向矩阵的第0个索引处找到方位角。是吗?在任何情况下,在调用getOrientation后,方位角都是值[0]。感谢您的回复。
import static android.hardware.SensorManager.AXIS\X;导入静态android.hardware.SensorManager.axisz代码>