Die Antwort von Dave X,
az = 90-atan (y / x) * 180 / pi
, befindet sich rechts Spur. Es kann jedoch aus zwei Gründen nicht so funktionieren, wie es ist:
-
Die Formel schlägt immer dann fehl, wenn x = 0,
-
gleicher Azimut für x = y = 1 und für x = y = −1. Mit anderen Worten, es kann nicht zwischen Nordosten und Südwesten unterschieden werden.
ol> Die Formel könnte durch Ersetzen von atan (y / x)
festgelegt werden durch eine Funktion, die zurückgibt:
- atan (y / x) wenn x> 0
- π / 2 wenn x = 0 und y> 0
- −π / 2 wenn x = 0 und y < 0
- atan (y / x) + π wenn x < 0 und y ≥ 0
- atan (y / x) - π wenn x < 0 und y < 0
Dies wäre im Wesentlichen eine "quadrantenbewusste" Version des Arkustangens mit zwei Argumenten, die zu (-π, π] anstelle von (- führt) π / 2, π / 2).
Glücklicherweise existiert eine solche Funktion bereits. Sie ist eine sehr standardmäßige Funktion der C-Bibliothek und heißt atan2 ()
. Somit ist die korrekte Formel ist
az = 90 - atan2 (y, x) * 180 / M_PI;
Nun, da atan (y / x) = π / 2 - atan (x / y) kann die obige Formel in
az = atan2 (x, y) * 180 / M_PI;
vereinfacht werden gibt die Richtung des (x, y) -Vektors an, der im Uhrzeigersinn von der y-Achse aus gezählt wird. Es ist wahrscheinlich, dass das OP stattdessen die Überschrift eines Fahrzeugs wissen möchte. Die richtige Formel hängt dann davon ab, wie das Magnetometer relativ zum Fahrzeug montiert wurde. Wenn wir annehmen, dass die x-Achse des Magnetometers nach vorne und die y-Achse nach links zeigt, dann:
- fährt das Fahrzeug nach Norden (0 ° magnetischer Kurs), wenn die horizontale Komponente des Magnetfelds ist entlang + x
- fährt das Fahrzeug nach Osten (90 ° magnetischer Kurs), wenn sich die horizontale Komponente des Magnetfelds entlang + y
befindet Fahrzeugkurs ist
Kurs = atan2 (y, x) * 180 / M_PI;
Offensichtlich muss die magnetische Deklination hinzugefügt werden, wenn man an der Überschrift true (statt magnetisch ) interessiert ist.