-2
我想從兩個地理位置找到指南針頭。 我在寫C應用程序。我寫了一個函數,如查找與地理座標的指南針標題
double CalculateHeading(double lat1, double long1, double lat2, double long2)
{
double Latitude = lat1 - lat2;
double Longitude = long1 - long2;
double angle = 0;
printf("\n#################################\n");
printf("Lat1: %lf Lat2: %lf\n", lat1, lat2);
printf("Long1: %lf Long2: %lf\n", long1, long2);
printf("Lat Diff: %lf\n", Latitude);
printf("Long Diff: %lf\n", Longitude);
angle = atan2(Longitude, Latitude);
angle = radiansToDegrees(angle);
printf("Angle: %lf\n", angle);
printf("#################################\n");
return angle;
}
但是這不適用於相同的位置。在這裏我傳遞了lat1,long1,lat2,long2的程度。 任何人都可以幫助我嗎?
從http://www.movable-type.co.uk/scripts/latlong.html更新的代碼這是工作,
#define degreesToRadians(angleDegrees) (angleDegrees * M_PI/180.0)
#define radiansToDegrees(angleRadians) (angleRadians * 180.0/M_PI)
double CalculateHeading(double lat1, double lon1, double lat2, double lon2)
{
double lat1_rad = degreesToRadians(lat1);
double lat2_rad = degreesToRadians(lat2);
double diffLon = lon2-lon1;
double dLon = degreesToRadians(diffLon);
double y = sin(dLon) * cos(lat2_rad);
double x = cos(lat1_rad) * sin(lat2_rad) - sin(lat1_rad) * cos(lat2_rad) * cos(dLon);
double angle = 0;
angle = atan2(y,x);
printf("Angle: %lf\n", radiansToDegrees(fmod(angle + 360.0, 360.0)));
return angle;
}
「不工作」不是正確的錯誤描述。你期望得到什麼結果?你會得到什麼結果?您的配方是否適用於紙張,並且您有C問題或您的配方已經錯誤? – Gerhardh
除了在你的問題中缺少強制性信息外,第一個建議是你應該仔細看看atan2的參數。什麼是預期的,你通過了什麼? – Gerhardh
你說「指南針標題」,但不要從「真北」改爲「磁北」。 –