Kompass in Android

Ich versuche, das Programm ein Kompass mit Android mit den accelorometer und der Magnetfeld-sensor, nun Frage ich mich, wie man den richtigen Winkel für meine Kompass.

Lese ich die Werte des Beschleunigungssensors und der Magnetfeld-sensor in "accele" und "magne" ersetzt. Um den Winkel, führe ich die folgenden:

float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, accele, magne);
        if(success) {
            float orientation[] = new float[3];
            SensorManager.getOrientation(R, orientation);
            azimuth = orientation[0]; //contains azimuth, pitch, roll
                            ....

Später, ich benutze eine rotationsmatrix um meine Nadel:

rotation.setRotate(azimuth, compass.getWidth() / 2, compass.getHeight() / 2);
canvas.drawBitmap(needle, rotation, null);

Nun, die Dokumentation der getOrientation sagt, dass die Orientierung[0] sollte die rotation um die z-Achse. Die Dokumentation besagt, dass TYPE_ORIENTATION
"Azimut, Winkel zwischen der magnetischen Nordrichtung und der y-Achse um die z-Achse (0 bis 359). 0=Nord, 90=Ost, 180=Süd, 270=West".

Mein Azimut wird jedoch nicht zwischen 0 und 359, sondern um -2 zu 2. Was genau ist der Azimut von getOrientation und wie kann ich es konvertieren zu einem Winkel?

InformationsquelleAutor der Frage user1809923 | 2012-11-08

Schreibe einen Kommentar