android - 以度数获取方向

标签 android android-sensors

我正在尝试创建一个简单的指南针应用程序(用于学习目的),并且我正在使用使用磁传感器和加速度计的旋转矩阵。这是我的代码:

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
        geomagnetic[0] = event.values[0];
        geomagnetic[1] = event.values[1];
        geomagnetic[2] = event.values[2];
        havemag = true;
    }
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        gravity[0] = event.values[0];
        gravity[1] = event.values[1];
        gravity[2] = event.values[2];
        haveacc = true;
    }

    if (haveacc && havemag) {
        if (SensorManager.getRotationMatrix(Rm, I, gravity, geomagnetic)) {
            float[] result = new float[3];
            SensorManager.getOrientation(Rm, result);

            azimuth = result[0];
            pitch = result[1];
            roll = result[2];
        }
    }
}

当我在移动手机时查看这些值(使用 Log.d 输出)时,我得到了不正确的值。我使用这段代码来获得学位:

int deg = (int)(azimuth * (float)57.295);

但是这个值永远不会达到零(应该在 180/-180 的对面)。相反,与 180/-180 的位置相反,我得到 -85(大约)。

最佳答案

您应该使用正确的 JavaMath 函数将弧度角转换为度数。此外,将角度(以度为单位)转换为 [0 - 360] 度区间非常有用。

// angle in degree [-180 - 0 - 180] degree
azimuth = Math.toDegrees( result[0] )

// angle in degree [0 - 360] degree
azimuth = ( Math.toDegrees( result[0] ) + 360 ) % 360;

关于android - 以度数获取方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20447138/

相关文章:

android - 如何使用传感器加速度计数据沿 X 和 Y 轴移动 ImageView

java - 在 Android 中使用十进制格式四舍五入

android - 获取已安装的安卓应用程序列表

java - 陀螺仪 Android 的简单方法

使用传感器数据的 Android 智能电源管理

android - 如何使用传感器获取手机的角度/度数?

android - 以 selectableItemBackground 作为背景的形状可绘制对象

android - toast 导致游戏意外关闭

java - 字符串返回标签而不是格式化文本

java - Android 传感器直立旋转