You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于使用Haversine公式计算球面两点最短距离的疑问

关于使用Haversine公式计算球面两点最短距离的疑问

嘿,我来帮你理清这里的问题~首先你在参数对应和公式使用上出现了几个小错误,导致最后误以为c是坐标,咱们一步步来修正:

首先纠正核心参数混淆问题

你把纬度差(Δφ)和经度差(Δλ)搞反啦!

  • 两个人都在40N纬度,所以纬度差Δφ = φ₂ - φ₁ = 0
  • 经度差才是需要重点计算的:A在0.4W(可以记为-0.4°),B在74E(+74°),所以Δλ = 74° - (-0.4°) = 74.4°,转换成弧度是 74.4 * π/180 ≈ 1.3003 弧度

你之前把经度的差值当成了纬度差,这是导致后续混乱的根源哦。

重新梳理Haversine公式的正确计算步骤

Haversine公式的正确流程是:

  1. 转换所有角度为弧度:

    • φ₁=φ₂=40° = 40 * π/180 ≈ 0.6981 弧度
    • λ₁=-0.4° = -0.4 * π/180 ≈ -0.00698 弧度
    • λ₂=74° = 74 * π/180 ≈ 1.2915 弧度
    • Δφ=0,Δλ=λ₂-λ₁≈1.3003 弧度
  2. 计算a值:
    因为Δφ=0,所以sin²(Δφ/2)=0,公式简化为:
    $$a = \cos \phi_1 \cdot \cos \phi_2 \cdot \sin^2(\Delta\Lambda/2)$$
    代入数值:

  • $\cos(0.6981)≈0.7660$,所以$\cosφ₁·\cosφ₂≈0.7660²≈0.5868$
  • $\sin(Δλ/2)=\sin(1.3003/2)≈\sin(0.6501)≈0.606$,平方后≈0.367
  • 最终$a≈0.5868 * 0.367≈0.215$
  1. 计算c值(关键修正!)
    你写错了c的计算公式,正确的应该是用双参数反正切函数arctan2,而不是arctan(2(...)):
    $$c = 2 \cdot \arctan2( \sqrt{a}, \sqrt{1−a} )$$
    这里arctan2(x,y)返回的是一个单一的弧度值,不是坐标!你之前的写法是把函数名和参数搞混了。代入数值:
  • $\sqrt{a}≈\sqrt{0.215}≈0.464$,$\sqrt{1-a}≈\sqrt{0.785}≈0.886$
  • $\arctan2(0.464, 0.886)≈0.488$ 弧度
  • 所以$c=2*0.488≈0.976$ 弧度
  1. 计算最终距离
    地球半径R=6371km,所以:
    $$d = R \cdot c ≈ 6371 * 0.976 ≈ 6218 \text{ km}$$

总结你之前的问题点

  • 混淆了纬度差和经度差,导致Δφ和Δλ的取值完全颠倒
  • 错误书写了c的计算公式,把arctan2写成了arctan(2(...)),误解了返回值的含义
  • 弧度转换时近似值太粗糙(比如把40°直接取0.7弧度),会影响最终结果的精度

这样一步步修正后,就能得到正确的两点最短球面距离啦~

备注:内容来源于stack exchange,提问作者Superunknown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:03:02