我已经开始研究c中的自主直升机了。我需要帮助找到一种方法来计算轴承acuratley。我使用两组坐标(纬度和经度),一组是当前位置,另一组是目标点。我已经将纬度和经度转换为十进制格式,所以....
40°58'19.86"N = 40.972183
74°14'52.74"W = 74.247983
有人能告诉我c中的代码,找到我可以使用的方位或公式吗?
我看过:http://www.movable-type.co.uk/scripts/latlong.html当我将它转移到c时,结果毫无意义。
这就是我的尝试:
double x = Sin(Longitude2 - Longitude1) * Cos(Latitude2);
double y = Cos(Latitude1) * Sin(Latitude2) - Sin(Latitude1) * Cos(Latitude2) * Cos(Longitude2 - Longitude1);
double heading = (Atan2(x, y) % 2 * 3.14159265) (180/3.14159265);
答案 0 :(得分:2)
您是否在计算之前将坐标从度数转换为弧度?
angleRad = 3.14159265 * angleDeg / 180;
并且
bearing = Atan2(y, x);
在那个网站上。
轴承应依次从rad转换为deg:
bearing = 180 * bearing / 3.14159265;
如果是负值,最终:
bearing = bearing + 360;
我不知道如何使用上面的约定(使用“%”)来编写它。
Latitude1和Longitude1是观察者的坐标 Latitude2和Longitude2是目标点的坐标。
该网站的公式运作良好。
答案 1 :(得分:1)
对于您考虑的非常小的区域,您可以假设世界是平坦的。 如果您还需要在本地工作,您可以预先计算地面上的度/纬度值,以米(或英尺)为单位
然后只需将delta lat / lon转换为距离并执行正常的trig。
要将距离转换为纬度/经度,您可以使用Google地球来测量它或 How to convert latitude or longitude to meters?