【发布时间】:2014-06-24 09:18:37
【问题描述】:
我编写了一个程序来获取两个 gps 位置之间的角度。它在 C# 中运行良好,但在 C 中却不行。问题出在哪里?
这是C#中的代码
double lat1 = GetRAD(pos1.Latitude);
double lat2 = GetRAD(pos2.Latitude);
double long1 = GetRAD(pos1.Longitude);
double long2 = GetRAD(pos2.Longitude);
double angleAtCentre = Math.Acos(Math.Sin(lat1) * Math.Sin(lat2) + Math.Cos(lat1) * Math.Cos(lat2) * Math.Cos(long2 - long1));
double retVal = Math.Acos((Math.Sin(lat2) - Math.Sin(lat1) * Math.Cos(angleAtCentre)) / (Math.Cos(lat1) * Math.Sin(angleAtCentre)));
retVal = retVal * 180.0 / Math.PI;
if (long1 > long2)
{
retVal = retVal * (-1);
}
return retVal;
这里是 C 中的代码
double lat1 = GetRAD(pos1.latitude);
double lat2 = GetRAD(pos2.latitude);
double long1 = GetRAD(pos1.longitude);
double long2 = GetRAD(pos2.longitude);
double angleAtCentre = acos(sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(long2 - long1));
double retVal = acos((sin(lat2) - sin(lat1) * cos(angleAtCentre)) / (cos(lat1) * sin(angleAtCentre)));
retVal = GetDEG(retVal);
if(long1 > long2)
{
retVal = retVal * (-1);
}
return retVal;
我用坐标试了一下:Pos1 (47.0998194N, 9.8605694E), Pos2 (47.1004972N, 9.8600639E) C# 中的正确结果是 -26.9 度,在 C 中我得到类似 -88 的结果
【问题讨论】:
-
C语言中
GetDEG函数的定义在哪里? -
retVal = retVal * (-1);应该是retVal = -retVal; -
为什么只显示部分代码?错误很可能出现在您未显示的代码部分中。
-
在 C 示例中显示
GetRad和getDEG的定义。
标签: c# c trigonometry