【发布时间】:2017-06-12 00:31:00
【问题描述】:
假设一个人正在使用这个指南针,从 90 度开始,他们开始顺时针或逆时针旋转。计算他们完成了多少次完整的 360 度旋转的最佳方法是什么?假设它们从头到尾仅顺时针或逆时针旋转。
我不断提出解决方案,例如,如果起始方位角为 90 度,我会在传感器数据发生变化时继续检查下一个方位角,如果它始终沿一个方向移动,我知道它们正在旋转。如果他们继续向那个方向旋转并使其回到 90 度,那算作一次旋转。我的方法看起来非常复杂且效率低下,我很难想出更好的方法。
在这种情况下,我预计会有多个完整的轮换。
如果有任何帮助,我将不胜感激。谢谢!
我找到了this 相关答案,并试图为此整理一个代码示例。如果有人已经做过类似的事情,请发布!
@Override
public void onSensorChanged(SensorEvent event)
{
switch(event.sensor.getType())
{
case Sensor.TYPE_GRAVITY:
{
mValuesAccelerometer = lowPass(event.values.clone(), mValuesAccelerometer);
break;
}
case Sensor.TYPE_MAGNETIC_FIELD:
{
mValuesMagneticField = lowPass(event.values.clone(), mValuesMagneticField);
break;
}
}
boolean success = SensorManager.getRotationMatrix(
mMatrixR,
mMatrixI,
mValuesAccelerometer,
mValuesMagneticField);
if (success)
{
SensorManager.getOrientation(mMatrixR, mMatrixValues);
float azimuth = toDegrees(mMatrixValues[0]);
float pitch = toDegrees(mMatrixValues[1]);
float roll = toDegrees(mMatrixValues[2]);
if (azimuth < 0.0d)
{
//The bearing in degrees
azimuth += 360.0d;
}
}
}
【问题讨论】:
标签: android android-sensors compass-geolocation