Comment devrais-je calculer l'azimut, la hauteur, l'orientation lorsque mon appareil Android n'est pas plat?

Je suis en utilisant l'Android gravité et le champ magnétique capteurs pour calculer l'orientation via SensorManager.getRotationMatrix et SensorManager.getOrientation. Cela me donne l'azimut, la hauteur et l'orientation des nombres. Les résultats semblent de bon sens lorsque l'appareil est posée à plat sur une table.

Cependant, j'ai désactivé commute entre les modes portrait et paysage dans le manifeste, de sorte que getWindowManager().getDefaultDisplay().getRotation() est toujours à zéro. Lorsque je tourne l'appareil de 90 degrés, de sorte qu'il est debout à la verticale, j'en difficulté. Parfois, les chiffres semblent assez mal, et j'ai réalisé que cela se rapporte à Gimbal lock. Cependant, d'autres applications ne semblent pas avoir ce problème. Par exemple, j'ai comparé mon application à l'encontre de deux gratuit de test de capteur apps (Capteur De Testeur (Dicotomica) et Surveillance du capteur (R)). Mon application est en accord avec ces applications lorsque l'appareil est à plat, mais comme je l'ai faites pivoter l'appareil dans la position verticale, il peut y avoir des différences significatives. Les deux applications semblent être d'accord les uns avec les autres, alors comment font-ils contourner ce problème?

source d'informationauteur gisking | 2013-03-27