Gérer des nombres et des calculs extrêmement précis

Bonjour tout le monde,

Je me suis lancé dans un projet utilisant un GPS dans lequel je souhaite :

  • calculer la distance entre 2 points gps
  • calculer le cap à adopter pour aller d’un point 1 à un point 2

J’ai trouvé sur internet les formules qui calculent tout ça avec d la distance entre les 2 coordonnées (en radian) et azimut le cap (en radian)

d=(acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2)));
        
 
  if (sin(lon2-lon1)<0)
  {     
   azimut=acos((sin(lat2)-sin(lat1)*cos(d / 6371))/(sin(d / 6371)*cos(lat1)));  
  }else{ 
   azimut=2*pi-acos((sin(lat2)-sin(lat1)*cos(d / 6371))/(sin(d / 6371)*cos(lat1)));
  }

Avec lat1 la latitude du point 1 (en radian), lon1 la longitude du point 1 (en radian)ect…
Un exemple de coordonnées gps : lat1 = 48.858366 et lon1 = 2.294496

Je stocke tout ça dans des double (d’ailleurs petite question : pouvez-vous me confirmer que float = double)

Voici mon problème : lorsque je rentre 2 points ayant une distance inférieure à environ 2 km, j’ai en retour une distance nulle et donc une azimut elle aussi nulle

Je suppose que cela vient du fait que je demande trop de précision et que du coup les variable double ne “suffisent” plus

Je souhaiterait avoir une précision d’au moins 2-3 mêtres si possible

Avez-vous des pistes pour m’aider ?

Je vous remercie par avance

La lib TinyGPS++ fais ce genre de calcul très facilement et je pense precise au 2-3 mètres comme tu l'aimerai.

En plus de traiter les trames NMEA qu'un GPS diffuse elle dispose de fonction telle que courseTo, distanceTo, cardinal etc...

Tu devrais t'economiser pas mal de ligne de code

Salut,

Au niveau de la déclaration des variables il y a dans votre cas :

  • float
  • double
  • long double

Le dernier est surement à privilégier pour vos calculs.

@+

Ouawou je ne pouvais pas avoir mieux ! Je viens de tester cette librairie et tout fonctionne NICKEL

Un grand merci à vous 2

Bonne soirée :)

Pour avr gcc, float et double sont équivalents http://www.avrfreaks.net/forum/what-float-winavr et là https://gcc.gnu.org/wiki/avr-gcc