【问题标题】:How does atan appear in haversine formula?atan如何出现在haversine公式中?
【发布时间】:2023-03-06 03:37:01
【问题描述】:

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

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

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

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));

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

【问题讨论】:

    标签: trigonometry haversine


    【解决方案1】:

    根据定义

    hav(θ)=sin2(θ/2)

    如果(θ)=a,那么

    θ = 2 arcsin(sqrt(a))

    expressing arcsine with arctangent 之后,变成:

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


    更新澄清回应 OP 的评论:

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

    【讨论】:

    • 感谢您的回答。但我相信hav(θ)=sin2(θ/2) 在将变量分配给a 时充当样本中的Math.sin(Δφ/2) * Math.sin(Δφ/2)Math.sin(Δλ/2) * Math.sin(Δλ/2) 中的haversine 函数。这不是atan 的来源。
    • @choz 我在回答中添加了一个说明
    • 我现在明白了。当您可以说“哦..文档说要通过应用逆半正弦(如果可用)或使用反正弦(反正弦)函数以及顺便说一句Math.asin(Math.sqrt(a)) = Math.atan2(Math.sqrt(a), Math.sqrt(1-a));”来解决d时,为什么一切都必须变得复杂...无论如何谢谢:)
    【解决方案2】:

    这只是 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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 2011-09-12
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      相关资源
      最近更新 更多