Android陀螺仪传感器

时间:2015-12-28 06:55:52

标签: android

 private static final float NS2S = 1.0f / 1000000000.0f;
 private final float[] deltaRotationVector = new float[4]();
 private float timestamp;

 public void onSensorChanged(SensorEvent event) {
      // This timestep's delta rotation to be multiplied by the current rotation
      // after computing it from the gyro sample data.
      if (timestamp != 0) {
          final float dT = (event.timestamp - timestamp) * NS2S;
          // Axis of the rotation sample, not normalized yet.
          float axisX = event.values[0];
          float axisY = event.values[1];
          float axisZ = event.values[2];

          // Calculate the angular speed of the sample
          float omegaMagnitude = sqrt(axisX*axisX + axisY*axisY + axisZ*axisZ);

          // Normalize the rotation vector if it's big enough to get the axis
          if (omegaMagnitude > EPSILON) {
              axisX /= omegaMagnitude;
              axisY /= omegaMagnitude;
              axisZ /= omegaMagnitude;
          }

          // Integrate around this axis with the angular speed by the timestep
          // in order to get a delta rotation from this sample over the timestep
          // We will convert this axis-angle representation of the delta rotation
          // into a quaternion before turning it into the rotation matrix.
          float thetaOverTwo = omegaMagnitude * dT / 2.0f;
          float sinThetaOverTwo = sin(thetaOverTwo);
          float cosThetaOverTwo = cos(thetaOverTwo);
          deltaRotationVector[0] = sinThetaOverTwo * axisX;
          deltaRotationVector[1] = sinThetaOverTwo * axisY;
          deltaRotationVector[2] = sinThetaOverTwo * axisZ;
          deltaRotationVector[3] = cosThetaOverTwo;
      }
      timestamp = event.timestamp;
      float[] deltaRotationMatrix = new float[9];
      SensorManager.getRotationMatrixFromVector(deltaRotationMatrix, deltaRotationVector);
      // User code should concatenate the delta rotation we computed with the current rotation
      // in order to get the updated rotation.
      // rotationCurrent = rotationCurrent * deltaRotationMatrix;
 }

获得deltaRotationMatrix后,我如何使用此矩阵作为旋转矩阵来旋转2D图片?那可能吗?我想要的功能是使用陀螺仪传感器来获得总共旋转的角度,然后使用箭头图片来表示它。

0 个答案:

没有答案