Salve,
ho fatto il seguente programmino per calcolare la distanza e un angolo di inclinazione di due punti in una cartina geografica.
Ho provato a stampare in tutti i modi possibili ma non riesco ad ottenere il risultato corretto.
#include<stdio.h>
#include<math.h>
//#define printf __mingw_printf //enables the MinGW versions of all the printf-family functions
int main() {
long double a1=43.52893149, a2=43.527705, b1=13.05713832, b2=13.05694788, lat1, lat2, lon1, lon2, lat1r, lat2r,
lon1r, lon2r, Pi=3.14159265, Eta, Etar, d;
int a=6371;
if (a1>a2){
lat1=a1;
lat2=a2;
}
else {
lat1=a2;
lat2=a1;
}
if (b1>b2){
lon1=b1;
lon2=b2;
}
else {
lon1=b2;
lon2=b1;
}
lat1r =(Pi*lat1)/180;
lat2r =(Pi*lat2)/180;
lon1r =(Pi*lon1)/180;
lon2r =(Pi*lon2)/180;
d = acos((sin(lat2r)*sin(lat1r)+(cos(lon2r)*cos(lon1r))*cos(lon1r-lon2r)))*a;
printf ("La distanza tra i punti GPS è:\n");
printf ("%Lf;", d);
Etar = atan(sin(lat2r)*sin(lon1r-lon2r)*sin(lat2r)/(cos(lat2r)-cos(lat1r)*cos(d)));
Eta = (Etar*180)/Pi;
printf ("\nLa direzione tra i punti GPS è:\n");
printf ("%Lf;", Eta);
printf ("%Lf;", Etar);
return 0;
}
L'output è:
La distanza tra i punti GPS è:
-2.000000;
La direzione tra i punti GPS è:
-2.000000;-2.000000;
*Le formule le ho testate prima su Excel e dovrebbero essere corrette comunque forniscono un risultato probabile.*
Se metto come float o double (naturalmente cambiando in prontf %f e %lf) ottengo:
La distanza tra i punti GPS è:
-1.#IND00;
La direzione tra i punti GPS è:
-1.#IND00;-1.#IND00;
Quando uso long double ho una segnalazione su printf:
Multiple markers at this line
- unknown conversion type character 'L' in format [-
Wformat=]
- too many arguments for format [-Wformat-extra-args]
Come faccio a stampare correttamente?