6

我知道以前有人问过这个问题,但我还没有找到我正在寻找的答案。

我想做的就是把手机举到天空中,并知道我拿着它相对于地平线的角度。因此,如果我将它直接放在我的上方(屏幕面向地面),那么它的读数应该是 90 度,如果我把它放在我面前(屏幕面对我),它的读数应该是 0 度。

我摸索了一些从加速度计获取数据的基础知识,我相信我从中得到了 X、Y 和 Y 值。我怎样才能抓住这些点并找到我的角度?下面是我从中收集坐标的 OnSensorChanged 事件。

    public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
   mGravity = event.values;
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
   mGeomagnetic = event.values;
if (mGravity != null && mGeomagnetic != null) {
   float R[] = new float[9];
   float I[] = new float[9];

  boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);
   if (success) {
       float orientation[] = new float[3];
       SensorManager.getOrientation(R, orientation);
       playerAngle = (float) Math.toDegrees(Math.atan2(orientation[1], orientation[0]));

    }
4

0 回答 0