#include <iostream>
#include <cmath>
using namespace std;
#define pi 3.1415926535897932384626433832795
#define EARTH_RADIUS 6378.137 //地球半径 KM
double rad(double d)
{
return d * pi / 180.0;
}
double RealDistance(double lat1, double lng1, double lat2, double lng2)//lat1第一个点纬度,lng1第一个点经度,lat2第二个点纬度,lng2第二个点经度
{
double a;
double b;
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
a = radLat1 - radLat2;
b = rad(lng1) - rad(lng2);
double s = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(radLat1)*cos(radLat2)*pow(sin(b / 2), 2)));
s = s * EARTH_RADIUS;
s = s * 1000;
return s;
}
int main()
{
cout << RealDistance(20.194970489552652, 110.564224161560745, 20.195110378886003, 110.564232333140893) << std::endl;
getchar();
return 0;
}
Nota: El método anterior es para el cálculo de ángulos, si son radianes, es el siguiente:
RealDistance(lat1, lng1, lat2, lng2) * 180 / pi;
Los nudos de la unidad oceánica se convierten en metros / segundo:
1 nudo es igual a 1 milla náutica por hora, que son 1.852 kilómetros (km) por hora, 20 nudos son 20 millas náuticas / hora, 37.04 kilómetros / hora, (unidad de velocidad), que es 10,28 M / s, 20 nudos corriendo durante 100 ms, ¡puedes moverte 10,28 * 0,1 = 1,028 metros! ! ! , Corre durante tres segundos, puede moverse 30,84 metros
El programa ejecutable correspondiente es el siguiente:
https://download.csdn.net/download/qq_23350817/15599651