小编Woo*_*hoi的帖子

Android:SensorManager.getRotationMatrix 和 SensorManager.getOrientation() 的算法

要在 Android 中从欧拉角(例如俯仰、滚转、方位角)中获取方向,需要执行以下操作:

  1. SensorManager.getRotationMatrix(float[] R, float[] I, float[] Gravity, float[] geomagnetic);
  2. SensorManager.getOrientation(float[] R, float[]orientation);

在第一个中,我意识到它使用了一种 TRIAD 算法;旋转矩阵(R[])由重力、地磁X重力、重力X(地磁X重力)---X为叉积组成。
请参阅以下代码:

    float Ax = gravity[0];
    float Ay = gravity[1];
    float Az = gravity[2];
    final float Ex = geomagnetic[0];
    final float Ey = geomagnetic[1];
    final float Ez = geomagnetic[2];
    float Hx = Ey*Az - Ez*Ay;
    float Hy = Ez*Ax - Ex*Az;
    float Hz = Ex*Ay - Ey*Ax;
    final float normH = (float)Math.sqrt(Hx*Hx + Hy*Hy + Hz*Hz);
    if (normH < 0.1f) {
        // device is …
Run Code Online (Sandbox Code Playgroud)

android rotation accelerometer orientation magnetometer

3
推荐指数
2
解决办法
3844
查看次数