Bonjour,
Je ne me rappelle pas exactement ce que j'avais mais c'était quelques chose comme:
Nord (360°)... (y,x)=(10,0)
Sud(180°)...(y,x)=(-20,-20)
Donc pour "y" une différence de :(+10 + (-20))=30 points de différence.
pour "x" une différence de :(0 + (-20))=20 points de différence.
Est (90°).......(y,x)=(-15,0)
Ouest(270°)..(y,x)=(+5,-20)
Donc pour "y" une différence de :(-15 + (5))=20 points de différence.
pour "x" une différence de :(0 + (-20))=20 points de différence.
Donc pour l'orientation Est/Ouest les différences sont identiques mais pour l'orientation Nord/Sud il y a une différence de 10 entre "x" et "y".
Il faut donc trouver le facteur de correction pour "x" ou "y" et faire des tests (en + ou en -) pour ces variables pour trouver la bonne orientation boussole.
Dans mon programme j'avais les instructions suivantes:
float heading = atan2(y+10, x);// correction de +10 pour la valeur de "event.magnetic.y" , ici, pour mon capteur.
//float heading = atan2(y, x);
//***********************************************************************************************************************
// Lorsque vous avez "heading", il faut corriger avec un facteur de déclinaison pour avoir le pole nord géographique.
// Trouvez, ici, pour votre location : http://www.magnetic-declination.com/
// La mienne est d'environ -14.5 degrés, ou -0.244 radians
float declinationAngle =-0.244;
heading += declinationAngle;
//***********************************************************************************************************************
etc.
etc.
J'espère que tu pourras trouver le(s) bon(s) facteur(s) de correction.
Quant c'est fait, ce bidule fonctionne parfaitement.
Au début, c'est vraiment décourageant quand on a pas la correction voulue.