gpt4 book ai didi

java - 尝试计算地球上的目的地纬度和经度时出现问题

转载 作者:行者123 更新时间:2023-12-01 15:27:13 24 4
gpt4 key购买 nike

我正在尝试使用下面的 dest() 函数计算地球上的目的地距离。然而,我的函数打印的目标点 (61.488580, 23.784896 ) 距离初始点 (61.488414, 23.784976) 仅 0.018 公里。正确答案应该是(61.49806, 23.765)

有人可以帮我弄清楚我做错了什么吗?

Source for how I calculate a destination point on the globe

lat2 = asin( sin(lat1)*cos(d/R) + cos(lat1)*sin(d/R)*cos(br) ) 
lon2 = lon1 + atan2( sin(θ)*sin(d/R)*cos(lat1), cos(d/R)−sin(lat1)*sin(lat2) )

这是我的出发点:

lat1= 61.488414 (degree) 
lon1= 23.784976 (degree)
br= 315 (degree)
d= 1.5 (km)
R= 6371 (km)
lat2= ? (degree)
lon2= ? (degree)

这是我对以下函数的实现:

void dest(){
double lat1, lon1, lat2, lon2, x, y, R, d, br;
double lat1rad, lat2rad, lon1rad, dbyRrad, brrad;

lat1=61.488414;
lon1=23.784976;
br=315;
d=1.5;
R=6371;

lat1rad=Math.toRadians(lat1);
lat2rad=Math.toRadians(lat2);
lon1rad=Math.toRadians(lon1);
dbyRrad=Math.toRadians(d/R);
brrad=Math.toRadians(br);

lat2 = Math.asin(Math.sin(lat1rad)*Math.cos(dbyRrad)
+Math.cos(lat1rad)*Math.sin(dbyRrad)*Math.cos(brrad));
lat2=Math.toDegrees(lat2);

y=Math.sin(brrad)*Math.sin(dbyRrad)*Math.cos(lat1rad);
x=Math.cos(dbyRrad)-Math.sin(lat1rad)*Math.sin(lat2rad);
lon2 = Math.atan2(y,x);
lon2 = Math.toDegrees(lon2);
lon2 = lon1 + lon2;

System.out.println("lat2 = "+ lat2); // correct lat2= 61.49806, lon2=23.765
System.out.println("lon2 = "+ lon2);
}

最佳答案

lat2rad=Math.toRadians(lat2);

但是此时您还没有初始化 lat2,因此它使用值 0。然后,您进行一些涉及 lat2 的计算:

lat2 = Math.asin(Math.sin(lat1rad)*Math.cos(dbyRrad)          
+Math.cos(lat1rad)*Math.sin(dbyRrad)*Math.cos(brrad));
lat2=Math.toDegrees(lat2);

但您永远不会将此值映射回 lat2rad。然后使用 lat2rad(仍然是 0)来计算 x:

x=Math.cos(dbyRrad)-Math.sin(lat1rad)*Math.sin(lat2rad);

也许第二个代码块应该是:

lat2rad = Math.asin(Math.sin(lat1rad)*Math.cos(dbyRrad)          
+Math.cos(lat1rad)*Math.sin(dbyRrad)*Math.cos(brrad));
lat2=Math.toDegrees(lat2rad);

关于java - 尝试计算地球上的目的地纬度和经度时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10013067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com