gpt4 book ai didi

Java Math.toRadians(angle) 与硬计算

转载 作者:行者123 更新时间:2023-11-30 07:03:18 26 4
gpt4 key购买 nike

这个问题与另一个 stackoverflow 讨论有关 distance between long&lat points

这是得票最多的答案中的代码:

/*
* Calculate distance between two points in latitude and longitude taking
* into account height difference. If you are not interested in height
* difference pass 0.0. Uses Haversine method as its base.
*
* lat1, lon1 Start point lat2, lon2 End point el1 Start altitude in meters
* el2 End altitude in meters
*/
private double distance(double lat1, double lat2, double lon1, double lon2,
double el1, double el2) {

final int R = 6371; // Radius of the earth

Double latDistance = deg2rad(lat2 - lat1);
Double lonDistance = deg2rad(lon2 - lon1);
Double a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2)
+ Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2))
* Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2);
Double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double distance = R * c * 1000; // convert to meters

double height = el1 - el2;
distance = Math.pow(distance, 2) + Math.pow(height, 2);
return Math.sqrt(distance);
}

private double deg2rad(double deg) {
return (deg * Math.PI / 180.0);
}

投票最高的答案有以下评论:

“为什么不用 Math.toRadians() 而不是 deg2rad()?它真的是自包含的。”

我在 documentation 中查找了 Math.toRadians() 方法并注意到这一点:

“将以度为单位的角度转换为大致等效的以弧度为单位的角度。从度数到弧度的转换通常不准确。

  1. 投票最高的答案的 deg2rad 方法是否比 Math.toRadians() 方法更精确?
  2. 使用 deg2rad 方法执行两次算术运算和一次 Math.Pi 查找,目前尚不清楚 Math.toRadians() 如何执行约定。假设这种距离计算可能会频繁执行,并且需要对用户输入做出快速响应,那么哪种转换方法的扩展效率更高?

如果问题 1 的答案是这两种方法具有大致相同的不精确性/准确性,我认为我会使用 Math.toRadians。使用 Math.ToRadians 使代码更具可读性,而且我认为它也会更有效地扩展。

最佳答案

Math.toRadians 是这样实现的:

public static double toRadians(double angdeg) {
return angdeg / 180.0 * PI;
}

1) 如果有差异,可以忽略不计。 Math.toRadians 先做除法,而那个答案先做乘法。

2) 确定答案的唯一方法是对其进行测试,但我希望两者都不会更快,因为它们都做同样的事情。

关于Java Math.toRadians(angle) 与硬计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28510115/

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