我正在创建一个应用程序,需要根据设备的方向来定位 ImageView。我使用磁场和加速度传感器的值来计算设备的方向。
SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerValues, magneticFieldValues)
SensorManager.getOrientation(rotationMatrix, values);
double degrees = Math.toDegrees(values[0]);
我的问题是,ImageView的位置对于方向的变化非常敏感,导致ImageView在屏幕上不停地跳来跳去(因为度数在改变)。
我了解到这可能是因为我的设备靠近一些会影响磁场读数的物体。但这似乎并不是唯一的原因。
我尝试下载了一些应用程序,发现“3D指南针”和“指南针”在其读数方面保持极其稳定(设置噪声滤波器后),我希望我的应用程序也能达到同样的效果。
我读到可以通过添加“低通滤波器”来调整读数的“噪声”,但由于我缺乏数学知识,不知道如何实现这一点。
我希望有人能帮助我让设备上的读数更加稳定,即使稍微移动设备也不会影响当前的方向。目前我只进行了一些小的调整。
if (Math.abs(lastReadingDegrees - newReadingDegrees) > 1) { updatePosition() }
为了过滤掉一些噪音。但效果不是很好 :)