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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die folgende Umrechnung von der gegebenen Azimut in Radianten (-PI, +PI) auf Grad (0, 360)
Variablennamen verwendet für die Bequemlichkeit 😉
InformationsquelleAutor der Antwort rgrocha
Einen code-snippet werden konnte, bekam von https://github.com/iutinvg/compass
Er nicht veraltet stopft, gilt low-pass-filter.
InformationsquelleAutor der Antwort iutinvg
Fand ich diese in den google ApiDemos:
Wie Sie sehen können, Sie müssen den Grad zwischen 0 bis 360
InformationsquelleAutor der Antwort Uriel Frankel