我对此有点新意。我最近要将数学方程式转换为代码。所以我开始练习简单的公式,比如Fibonacci数和hasrsine公式。
但是我对以下参考文献中的半身代码感到困惑;
一般来说,他们所做的是,
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));
它的哪一部分来自维基百科中的原始哈克林公式?我还没有在这些图表上发现任何切线。我在这里错过了什么吗?任何建议都表示赞赏。
答案 0 :(得分:3)
按照定义
甲肝(θ)= 罪 2 (θ/ 2)
如果 hav (θ)= a,那么
θ= 2 arcsin ( sqrt (a))
在expressing arcsine with arctangent之后,这变为:
θ= 2 arctan ( sqrt (a)/( sqrt (1-a)))
更新澄清以回应OP的评论:
某些角度θ的半正函数 hav (θ)是 sin 2 (θ/ 2)的简写。给定球体上的两个点并且θ是将这些点与球体的中心连接的半径之间的平坦角度,则半正式公式表示具有这些点的晶格(φ)和经度(λ)值的半正弦函数。因此,您可以通过已知值φ和λ计算半正函数的值(在代码中由变量ProcessBuilder pb = new ProcessBuilder("./words", "amo", "amas", "amat");
表示)。然后,您可以从a
找到θ的值(通过变量a
在代码中表示)。我上面的解释完全集中在那部分。然后使用已知值θ(和半径c
),您可以计算大圆距离R
。
答案 1 :(得分:2)
这只是Haversine公式的另一种表述。
---- Connecting to ftp.example.com (xx.xxx.xx.xxx) port 21
**** Socket error (Connection timed out) - reconnecting
---- Closing control socket
---- Connecting to ftp.example.com (xx.xxx.xx.xxx) port 21
**** Socket error (Connection timed out) - reconnecting
---- Closing control socket
---- Connecting to ftp.example.com (xx.xxx.xx.xxx) port 21
使用arctan(x) = arcsin(x / sqrt(x^2 + 1))
,您最终得到:
X = x / sqrt(x^2 + 1)
因此:
x = X / sqrt(1 - X^2)
然后在维基百科的Haversine公式中:
arcsin(X) = arctan(X / sqrt(1 - X^2))