2017-03-09 2 views
0

J'essaie de récupérer mon en-tête actuel à partir d'un appareil Android en utilisant Delphi Rad 10.1 Berlin.Obtenir l'en-tête actuel Delphi Multi-Device

Il y a une fonction dans le OrientationSensor qui est True Heading, cependant, cela n'est activé que sous Windows, selon la base de connaissances Embarcadero. Donc, je pense pour le faire, j'ai besoin de convertir les variables suivantes en un seul en-tête.

OrientationSensor1.Sensor.HeadingX 
OrientationSensor1.Sensor.HeadingY 
OrientationSensor1.Sensor.HeadingZ 

Comme je l'ai seulement besoin épiaison (et ne se soucient pas d'altitude), je crois que je peux ne pas tenir compte Z.

En retour, je dois récupérer le cap courant qui devrait être 0-360.

J'ai utilisé une formule I trouvé en ligne qui est: -

angle = atan2(Y, X); 

qui semblait aider, mais était très inexact à certains postes, et était négatif à d'autres.

Toute aide ou conseil serait apprécié.

Certains détails qui peuvent aider:

Il est une application multi-périphériques dans Delphi.

Il ne fonctionne que sur les appareils Android (et aussi seulement testé sur eux).

Merci d'avance.

+0

FWIW, atan2 devrait être négatif pour certaines entrées. Et qu'est-ce qui ne va pas avec ça? Si vous pensez que c'est déraisonnable, alors vous devez prendre du recul et mieux comprendre le trig de base avant de continuer. N'essayez pas de résoudre le problème en état d'ignorance. Comprendre toute solution potentielle. Cette copie de pâte sans culture de pensée ne vous fera aucun bien. –

+0

Salut David, Comme je dois me diriger en degrés, ça devrait être positif pour ce dont j'ai besoin, j'apprécie ce que tu veux dire, et je serai le premier à lever la main et admettre que je suis terrible au trig et donc je se sont tournés vers Internet pour obtenir de l'aide, cela ne signifie pas qu'il n'y avait pas 3 ou 4 jours de douleur avant d'y recourir. –

+0

-30 est le même que 330, est le même que -390. Le titre est périodique. Pensez à ce que cela signifie. –

Répondre

0

Ne pas ignorer HeadingZ.

Ces en-têtes d'arborescence ne sont pas relatifs à la surface du globe mais plutôt à l'orientation et à l'inclinaison de votre périphérique.

Donc, pour obtenir un vrai cap, vous devrez prendre en compte le cap pour tous les trois axes et également l'information d'inclinaison pour les trois axes.

Vous pouvez lire plus d'informations sur le calcul de la position ici: https://stackoverflow.com/a/1055051/3636228

Oui réponse est liée à l'objectif C, mais les mathématiques sont derrière même pour toutes les langues de programmation.

+0

Merci pour cet argent, marquant cela comme correct. –