Aiuto per calcolo (distanza punti GPS) - uso delle variabili sbagliato?

Buongiorno a tutti, sto realizzando un progetto con un GPS e mi sono bloccato sul calcolo della distanza fra due coordinate, probabilmente perché sbaglio a usare i tipi di dato. Chiedo quindi aiuto a voi!

Date due cordinate cosi descritte:
latA 43.824254
lngA 10.477824

latB 43.825185
lngB 10.482122

La formula da usare è questa:
=6372,795477598* ARCCOS(SEN(latA) * SEN(latB) + COS(latA) * COS(latB) * COS(lngA-lngB)
su Execel funziona, verificata tramite Google Earth ( in questo esempio: 360m)
chiaramente nelle funzioni i valori vanno convertiti da gradi in radianti rad=gradi*3,14/180

il codice che ho scritto è:
float latA=43.824254;
float latB=43.825185;
float lngA=10.477824;
float lngB=10.482122;
float dist;

dist=6372.795477598acos(sin(latA3.14/180)sin(latB3.14/180)+cos(latA3.14/180)cos(latB3.14/180)cos(lngA3.14/180-lngB3.14/180));

che però non funziona...un grazie in aticipo a chi vorrà aiutarmi :slight_smile:

Ciao e benvenuto

per prima cosa, per cortesia, presentati nell'apposita sezione (Generale -> presentazione); evitando di scrivere solo mezza riga ma specificando che conoscenze hai...fintanto che non fai questo nessuno può risponderti.

leggi bene il regolamento...in quanto in questo c'è scritto che il crossposting è proibito (anche tra lingue diverse).

Decidi in quale vuoi continuare la discussione e "chiudi" l'altro.

ciao

ciao e grazie del benvenuto.
Mi ero già presentato parecchio tempo addietro, ma sono "saltuario"... comunque non la ritrovo e l'ho rifatta.
Perdonate il crossposting... e il fatto che non riesco a chiudere un post. Non trovo il comando.

Dato la scarsa precisione dei float di Arduino le formule "sacre" tratte dei libri non vanno molto bene
Se decidi di rimanere in Italia, stasera ne parliamo, ci sono strade interessanti...

ciao, appena riesco "chiudo" ... nella libreria tinyGPS c'è una funzione per calcolare la distanza :slight_smile: io torsolo non l'avevo vista.. vabbè stasera provo

Da TinyGPS:

float TinyGPS::distance_between (float lat1, float long1, float lat2, float long2) 
{
  // returns distance in meters between two positions, both specified 
  // as signed decimal-degrees latitude and longitude. Uses great-circle 
  // distance computation for hypothetical sphere of radius 6372795 meters.
  // Because Earth is no exact sphere, rounding errors may be up to 0.5%.
  // Courtesy of Maarten Lamers
  float delta = radians(long1-long2);
  float sdlong = sin(delta);
  float cdlong = cos(delta);
  lat1 = radians(lat1);
  lat2 = radians(lat2);
  float slat1 = sin(lat1);
  float clat1 = cos(lat1);
  float slat2 = sin(lat2);
  float clat2 = cos(lat2);
  delta = (clat1 * slat2) - (slat1 * clat2 * cdlong); 
  delta = sq(delta); 
  delta += sq(clat2 * sdlong); 
  delta = sqrt(delta); 
  float denom = (slat1 * slat2) + (clat1 * clat2 * cdlong); 
  delta = atan2(delta, denom); 
  return delta * 6372795; 
}

I float di arduino a 8 bit hanno 5-6 cifre giuste. Le altre cifre decimali sono casuali. Per quello il calcolo Tuo é troppo inpreciso per riusire a calcolare qualcosa.
Ciao Uwe

grazie a tutti, ho usato la funzione distance_between, come suggerito da Datman e altri.
Segnalo solo che nella documentazione si trova " TinyGPSPlus.distanceBetween" col punto, mentre la sintassi giusta è TinyGPSPlus::distance_between (con i doppi doppi punti)