atan怎么出现在haversine公式中?
How does atan appear in haversine formula?
我对此有点陌生。我最近要将数学方程式转换为代码。所以我开始练习简单的公式,例如斐波那契数列和半正弦公式。
但我对以下参考资料中的半正弦代码有点困惑;
- Using the Haversine Formula in Javascript
- Calculate distance between two latitude-longitude points? (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 公式的另一种形式。
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))
我对此有点陌生。我最近要将数学方程式转换为代码。所以我开始练习简单的公式,例如斐波那契数列和半正弦公式。
但我对以下参考资料中的半正弦代码有点困惑;
- Using the Haversine Formula in Javascript
- Calculate distance between two latitude-longitude points? (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 公式的另一种形式。
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))