Ich versuche, einen Kompass mit Android mit dem Accelometer und dem Magnetfeldsensor zu programmieren, jetzt frage ich mich, wie man den richtigen Winkel für meinen Kompass bekommt.Kompass in Android
Ich lese die Werte des Beschleunigungsmessers und des Magnetfeldsensors in "accel" bzw. "magne" ein. Um den Winkel zu erhalten, führe ich folgendes:
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, verwende ich eine Rotationsmatrix meine Nadel zu setzen:
rotation.setRotate(azimuth, compass.getWidth()/2, compass.getHeight()/2);
canvas.drawBitmap(needle, rotation, null);
Nun wird die Dokumentation von GetOrientation sagt, dass die Orientierung [0] sollte die Rotation um die z-Achse sein. Die Dokumentation für TYPE_ORIENTATION besagt, dass "Azimut, Winkel zwischen der magnetischen Nordrichtung und der y-Achse, um die z-Achse (0 bis 359). 0 = Norden, 90 = Osten, 180 = Süden, 270 = Westen".
Mein Azimut liegt jedoch nicht zwischen 0 und 359, sondern eher bei -2 bis 2. Was genau ist der Azimut von getOrientation und wie kann ich ihn in einen Winkel umwandeln?
danke :) Was genau ist die letzte if-Anweisung für? – user1809923
Die Math.toDegrees() geben Ihnen einen Winkel zwischen -180 und 180 aus -PI und + PI Radianten Winkel. Dies bringt alles in die positive Richtung. – rgrocha
Dies ist die richtige Antwort. –