Wie wäre es damit:
Der Gravitationsvektor definiert ja quasi die Richtung "Boden" und wird ja auch durch einen Sensor ausgelesen. Jetzt könntest du doch die Ebene finden, die senkrecht darauf steht. Anschließend projizierst du den Magnetvektor auf diese Ebene. Jetzt projizierst du den modifizierten Vektor auf den Bildschirm, indem du die z-Komponente wegwirfst.
Grund: Das Erdmagnetfeld geht ja nicht tangential zur Oberfläche. Vielmehr hat es in unseren Breiten eine Abweichung von fast 30° zur Senkrechten (
http://www.gfz-potsdam.de/deklinationsrechner/) Vielleicht liegt es ja daran...?
P.S.: Die erste Projektion würde ich über ein doppeltes Kreuszprodukt machen. Also Magnetvektor sei m, dann
g x m ergibt nen Vektor nach Osten (oder Westen) und
g x Ergebnis ergibt dann den Magnetvektor der senkrecht auf dem Gravitationsvektor steht.