所以現在,我正在爲C++類做一個家庭作業。這項任務說我需要根據用戶給出的經度和緯度輸入度來計算兩個地方之間的距離。然後,半正式公式計算兩地之間的距離。在C++中用haversine公式計算經度/經度的結果問題
我遇到的問題是使用教師給出的測試值時,我得到的答案比他得到的答案要多。
我正在計算33.9425/N 118.4081/W(洛杉磯機場)和20.8987/N 156.4305/W(卡胡盧伊機場)之間的距離,LA機場是起始位置。
他對距離的回答是2483.3英里。我的答案是2052.1英里。
這裏是我的haversine公式代碼:
double haversine(double lat1, double lat2, double lon1, double lon2) {
// get differences first
double dlon = difference(lon1, lon2); // difference for longitude
double dlat = difference(lat1, lat2); // difference for latitude
// part a of algorithm
double a = pow(sin(dlat/2), 2) + cos(lat1) * cos(lat2) * pow(sin(dlon/2), 2);
// part b of algorithm
double b = 2 * atan2(sqrt(a), sqrt(1 - a));
// our result, or the great-circle distance between two locations
double result = EARTH_RADIUS * b;
return result;
}
與區別只是返回y - X在這種情況下。我的計算中似乎出了什麼問題?據我所知,在計算一切時我的括號似乎是確定的,所以我不確定爲什麼我會得到不同的答案。
更新:通過以弧度轉換經度和緯度來解決問題。在C++中,我通過定義PI = 3.14159265來實現這一點,並且對於我使用的每個trig函數,將其中的任何內容* PI/180相乘。 (即pow(sin((dlat/2)*(PI/180)),2)
將C++有同樣的問題即?只需要將我的緯度和經度轉換爲弧度? – Alex 2014-10-19 05:55:02