io ci sono! e ho trovato un paio di formulette che potrebbero far comodo: il modo per usare il GPS!
certo, non son complesse come le formule che prendono in considerazione il fatto che l'arco della terra è variabile, ma almeno non tira una linea retta, ma tende a seguire la via più breve fattibile.
Non ho scritto io le formule, ho preso da: http://www.movable-type.co.uk/scripts/latlong.html e da: http://williams.best.vwh.net/avform.htm
non ho acnora testato la performance e la precisione della formula sull'arduino, ma eccola: (attenzione: essa restituisce la tangente rispetto al NORD geografico della curva da seguire se da un punto A si vuole andare ad un punto B . Essendo curva va ricalcolata durante il percorso!)
float b = atan2(sin(lon1-lon2)*cos(lat2), cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon1-lon2) );
lat1 e lat2 sono le coordinate rispetto al NORD, espresse in secondi
lon1 e lon2 sono le coordinate rispetto ad OVEST, espresse in secondi (attenzione, i GPS sono rispetto ad EST, quindi il valore dato dal vostro GPS va invertito di segno)
(notare che non serve la distanza nella formula, in questo modo si evita di perdere la precisione doppiamente)
attenzione che la bearing in teoria è sempre compresa tra 0 e 2*PI, quindi dovreste normalizzarla prima di confrontarla con quella del vostro magnetometro, per esempio (modo molto alla spicciola):
while (b>2.0*PI){
b-=2.0*PI;
}
per calcolare la distanza che trascorrerete in quel viaggio, che essendo curvo sarà un più lungo che la classiga riga retta, ecco la formulazza:
float asin1 = sin((lat1-lat2)/2.0);
float sin1 = sin((lon1-lon2)/2.0);
float d = 2*asin(sqrt(2.0*asin1*asin1 + cos(lat1)*cos(lat2)*sin1*sin1));
printf("distance in KM: %f\n", d*6366.71);