atan 在半正矢公式中是如何出现的?

vad*_*lim 3 trigonometry haversine

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

\n\n

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

\n\n\n\n

一般来说,他们所做的是,

\n\n
var R = 6371e3; // metres\nvar \xcf\x861 = lat1.toRadians();\nvar \xcf\x862 = lat2.toRadians();\nvar \xce\x94\xcf\x86 = (lat2-lat1).toRadians();\nvar \xce\x94\xce\xbb = (lon2-lon1).toRadians();\n\nvar a = Math.sin(\xce\x94\xcf\x86/2) * Math.sin(\xce\x94\xcf\x86/2) +\n        Math.cos(\xcf\x861) * Math.cos(\xcf\x862) *\n        Math.sin(\xce\x94\xce\xbb/2) * Math.sin(\xce\x94\xce\xbb/2);\nvar c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\n\nvar d = R * c;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我从这里得到了原始半正矢公式的参考。

\n\n

然后,注意这一行,

\n\n
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

Leo*_*eon 5

根据定义

\n\n
\n

hav (\xce\xb8)= sin 2 (\xce\xb8/2)

\n
\n\n

若有( \ xce\xb8)=a,则

\n\n
\n

\xce\xb8 = 2 arcsin ( sqrt (a))

\n
\n\n

用反正切表示反正弦后,就变成:

\n\n
\n

\xce\xb8 = 2 arctan ( sqrt (a)/( sqrt (1-a)))

\n
\n\n
\n\n

针对OP评论的更新澄清:

\n\n

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

\n