我环顾四周,仍然找不到任何可以帮助我的东西!我写了一个程序来计算两个城市之间使用纬度和经度的距离,城市细节保存在一个文件中,然后加载到我的程序中进入BST!到目前为止一切正常,除非我运行代码,假设计算距离我得到每个城市相同的答案!我不太确定为什么我会为每个城市获得相同的答案!请帮我指出正确的方向?
这是计算距离的代码
#include <cmath>
#define pi 3.14159265358979323846
string userResponse;
float globalLat1, globalLon1, globalLat2, globalLon2;
for(int j= 0; j < 2; j++){
string whatever;
if (j==0){
bool hasbeenfound = false;
do{
//ask the user to enter their first city of their choice
whatever = "first ";
cout << "Enter your " + whatever + "City" << endl;
cout << "-------------------" << endl;
cin >> userResponse;
cout << endl;
if (Cities->search(userResponse)) //check if the entered city already exist
{
hasbeenfound = true;
}
else{
cout << "City not Found" << endl;
cout << endl;
}
//globalCity1 = Cities->sRootName;
globalLat1 = Cities->sLatitude;
globalLon1 = Cities->sLongitude;
}
while(hasbeenfound == false); //while the entered city hasn't been found, repeat the process
}else
{
bool hasbeenfound = false;
do{
//ask the user to enter their second city of their choice
whatever = "second ";
cout << endl;
cout << "Enter your " + whatever + "City" << endl;
cout << "-------------------" << endl;
cin >> userResponse;
cout << endl;
if (Cities->search(userResponse)) //check if the entered city already exist
{
hasbeenfound = true;
}
else{
cout << "City not Found" << endl;
}
//globalCity2 = Cities->sRootName;
globalLat2 = Cities->sLatitude;
globalLon2 = Cities->sLongitude;
}
while(hasbeenfound == false); //while the entered city hasn't been found, repeat the process
}
}
// This function converts decimal degrees to radians
double deg2rad(double deg) {
return (deg * pi / 180);
};
// This function converts radians to decimal degrees
double rad2deg(double rad) {
return (rad * 180 / pi);
};
//distance calculations
cout << endl;
distan = sin(globalLat1)) * sin(deg2rad(globalLat2)) + cos(deg2rad(globalLat1)) * cos(deg2rad(globalLat2)) * cos(globalLon2 - globalLon1);
distan = rad2deg(distan);
distan = distan * 60 * 1.1515;
distan = (6371 * pi * distan)/180;
cout << "The Distance between the to cities is: " << distan << " kilometers" << endl;
Run Code Online (Sandbox Code Playgroud)
MrT*_*rTJ 29
正如所说,Haversine公式是你的答案:
#include <math.h>
#include <cmath>
#define earthRadiusKm 6371.0
// This function converts decimal degrees to radians
double deg2rad(double deg) {
return (deg * M_PI / 180);
}
// This function converts radians to decimal degrees
double rad2deg(double rad) {
return (rad * 180 / M_PI);
}
/**
* Returns the distance between two points on the Earth.
* Direct translation from http://en.wikipedia.org/wiki/Haversine_formula
* @param lat1d Latitude of the first point in degrees
* @param lon1d Longitude of the first point in degrees
* @param lat2d Latitude of the second point in degrees
* @param lon2d Longitude of the second point in degrees
* @return The distance between the two points in kilometers
*/
double distanceEarth(double lat1d, double lon1d, double lat2d, double lon2d) {
double lat1r, lon1r, lat2r, lon2r, u, v;
lat1r = deg2rad(lat1d);
lon1r = deg2rad(lon1d);
lat2r = deg2rad(lat2d);
lon2r = deg2rad(lon2d);
u = sin((lat2r - lat1r)/2);
v = sin((lon2r - lon1r)/2);
return 2.0 * earthRadiusKm * asin(sqrt(u * u + cos(lat1r) * cos(lat2r) * v * v));
}
Run Code Online (Sandbox Code Playgroud)