Suche nach Orientierung mit getRotationMatrix() und getOrientation()

Im Versuch, um die Richtung des Vektors zeigen, die aus der Kamera, mit Bezug auf den magnetischen Norden. Ich bin unter dem Eindruck, daß ich die Werte wieder aus getOrientation(), aber ich bin mir nicht sicher, was Sie darstellen. Die Werte, die ich von getOrientation() ändern sich nicht erwartungsgemäß, wenn ich ändern Sie die Ausrichtung des Telefons (90 Grad drehen, ändert sich nicht, Werte um 90 Grad). Ich muss wissen, was die Werte, die von getOrientation() bedeuten. Was ich habe, so weit unten geschrieben:

package com.example.orientation;

import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.Toast;

public class Orientation extends Activity{

 private SensorManager mSM;
 private mSensorEventListener mSEL;

    float[] inR = new float[16];
    float[] outR= new float[16];
    float[] I = new float[16];
    float[] gravity = new float[3];
    float[] geomag = new float[3];
    float[] orientVals = new float[3];

    final float pi = (float) Math.PI;
    final float rad2deg = 180/pi;    

 /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mSM = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mSEL = new mSensorEventListener();  

        mSM.registerListener(mSEL, 
       mSM.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
       SensorManager.SENSOR_DELAY_NORMAL);

     mSM.registerListener(mSEL, 
       mSM.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), 
       SensorManager.SENSOR_DELAY_NORMAL);

 }



 private class mSensorEventListener implements SensorEventListener{

  @Override
  public void onAccuracyChanged(Sensor arg0, int arg1) {}

  @Override
  public void onSensorChanged(SensorEvent event) {

   //If the sensor data is unreliable return
   if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE)
    return;

   //Gets the value of the sensor that has been changed
   switch (event.sensor.getType()){  
   case Sensor.TYPE_ACCELEROMETER:
    gravity = event.values.clone();
    break;
   case Sensor.TYPE_MAGNETIC_FIELD:
    geomag = event.values.clone();
    break;
   }

   //If gravity and geomag have values then find rotation matrix
   if (gravity != null && geomag != null){

    //checks that the rotation matrix is found
    boolean success = SensorManager.getRotationMatrix(inR, I, gravity, geomag);
    if (success){

     //Re-map coordinates so y-axis comes out of camera
     SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_X, 
       SensorManager.AXIS_Z, outR);

     //Finds the Azimuth and Pitch angles of the y-axis with 
     //magnetic north and the horizon respectively
     SensorManager.getOrientation(outR, orientVals);
     float azimuth = orientVals[0]*rad2deg;
     float pitch = orientVals[1]*rad2deg;
     float roll = orientVals[2]*rad2deg;

     //Displays a pop up message with the azimuth and inclination angles
     String endl = System.getProperty("line.separator");
     Toast.makeText(getBaseContext(), 
       "Rotation:" +
       outR[0] + " " + outR[1] + " " + outR[2] + endl +
       outR[4] + " " + outR[5] + " " + outR[6] + endl +
       outR[8] + " " + outR[9] + " " + outR[10] + endl +endl +
       "Azimuth: " + azimuth + " degrees" + endl + 
       "Pitch: " + pitch + " degrees" + endl +
       "Roll: " + roll + " degrees", 
       Toast.LENGTH_LONG).show();
    } /*else
     Toast.makeText(getBaseContext(), 
       "Get Rotation Matrix Failed", Toast.LENGTH_LONG).show();*/
   }   
  }

    }

}

Ist, habe ich mich an die Dokumentation über die sensorManager-Klasse, aber es hat nicht geholfen dieses Problem lösen. Wenn jemand könnte mir helfen, Sinn aus der diese würde ich schätzen es wirklich. Ich bin den Test auf einem Nexus One mit Android 2.1

InformationsquelleAutor pat | 2010-10-26
Schreibe einen Kommentar