Android Compass orientation sur fiable (filtre passe-bas)

Im création d'une application où j'en ai besoin pour la position d'un ImageView en fonction de l'Orientation de l'appareil.
J'utilise les valeurs à partir d'une MagneticField Accéléromètre et des Capteurs pour calculer l'orientation du périphérique avec

SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerValues, magneticFieldValues)
SensorManager.getOrientation(rotationMatrix, values);
double degrees = Math.toDegrees(values[0]);

Mon problème est que le positionnement de l'ImageView est très sensible aux changements dans l'orientation. Faire de l'imageview constamment en sautant autour de l'écran. (parce que les degrés de changement)

J'ai lu que cela peut être parce que mon appareil est à proximité de choses qui peuvent affecter la magneticfield lectures. Mais ce n'est pas la seule raison qu'il semble.

J'ai essayé de télécharger certaines applications et a constaté que la "Boussole 3D" et "Compas" reste extrêmement stable dans ses lectures (lors du réglage du filtre de bruit), je voudrais le même comportement dans mon application.

J'ai lu que je peux modifier le "bruit" de mes lectures par l'ajout d'un "filtre passe-Bas", mais je n'ai aucune idée de comment mettre en œuvre cette (raison de mon manque de Mathématiques).

Im espérant que quelqu'un peut m'aider à la création d'un plus lecture stable sur mon appareil, Où un peu de mouvement à l'appareil l'habitude de nuire à l'orientation actuelle.
Droit maintenant, je fais une petite

if (Math.abs(lastReadingDegrees - newReadingDegrees) > 1) { updatePosition() }

De filtre abit du bruit. Mais sa ne fonctionne pas très bien 🙂

source d'informationauteur Mads Lee Jensen