vad*_*lim 3 trigonometry haversine
我对此有点陌生。我最近准备将数学方程转换为代码。所以我开始练习简单的公式,例如斐波那契数和半正矢公式。
\n\n但我对以下参考文献中的半正弦代码有点困惑;
\n\n\n\n一般来说,他们所做的是,
\n\nvar 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;\nRun Code Online (Sandbox Code Playgroud)\n\n我从这里得到了原始半正矢公式的参考。
\n\n然后,注意这一行,
\n\nvar c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\nRun Code Online (Sandbox Code Playgroud)\n\n它的哪一部分来自维基百科中的原始半正矢公式?我在这些图表上根本没有找到任何切线。我在这里错过了什么吗?任何建议表示赞赏。
\n根据定义
\n\n\n\n\nhav (\xce\xb8)= sin 2 (\xce\xb8/2)
\n
若有( \ xce\xb8)=a,则
\n\n\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
针对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。