atan怎么出现在haversine公式中?

How does atan appear in haversine formula?

我对此有点陌生。我最近要将数学方程式转换为代码。所以我开始练习简单的公式,例如斐波那契数列和半正弦公式。

但我对以下参考资料中的半正弦代码有点困惑;

一般来说,他们做的是,

var R = 6371e3; // metres
var φ1 = lat1.toRadians();
var φ2 = lat2.toRadians();
var Δφ = (lat2-lat1).toRadians();
var Δλ = (lon2-lon1).toRadians();

var a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +
        Math.cos(φ1) * Math.cos(φ2) *
        Math.sin(Δλ/2) * Math.sin(Δλ/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

var d = R * c;

而且我有参考原文haversine formula from here

然后,通知这一行,

var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

其中哪一部分来自维基百科中的原始haversine公式?我在这些图表上根本没有发现任何切线。我在这里错过了什么吗?任何建议表示赞赏。

根据定义

hav(θ)=sin2(θ/2)

hav(θ)=a,则

θ = 2 arcsin(sqrt(a))

expressing arcsine with arctangent之后,变成:

θ = 2 arctan(sqrt(a)/(sqrt(1-a)))


更新 针对 OP 评论的澄清:

haversine 函数 hav(θ) 对于某个角度 θ 是 shorthand 对于 sin 2(θ/2)。给定球体上的两个点,θ 是连接这些点与球体中心的半径之间的平角,半正弦公式用这些点的纬度 (φ) 和经度 (λ) 值表示半正弦函数。因此,您可以通过已知值 φ 和 λ 计算 haversine 函数的值(在您的代码中由变量 a 表示)。然后你可以从 a 中找到 θ 的值(在你的代码中用变量 c 表示)。我上面的解释正是集中在那个部分。然后使用已知的 θ 值(和半径 R),您可以计算大圆距离 d.

这只是 Haversine 公式的另一种形式。

来自https://en.wikipedia.org/wiki/Inverse_trigonometric_functions#Relationships_among_the_inverse_trigonometric_functions

arctan(x) = arcsin(x / sqrt(x^2 + 1))

使用 X = x / sqrt(x^2 + 1),您最终得到:

x = X / sqrt(1 - X^2)

因此:

arcsin(X) = arctan(X / sqrt(1 - X^2))

然后在维基百科的 Haversine 公式中:

d = 2R * arcsin(sqrt(a))
  = 2R * arctan(sqrt(a) / sqrt(1 - a))