在半径为 radius 的球面上,计算两点间沿大圆的最短弧长;输入以方位角 f(经度,绕 z 轴)与天顶角 t(余纬,自 z 轴起),角度单位为弧度。

Returns the shortest distance on the sphere with radius radius between the points with azimuthal angles (longitude) f1 () and f2 () from x axis and zenith angles (latitude) t1 () and t2 () from z axis (0 = north pole). All angles measured in radians. Status: tested on kattis:airlinehub

展开阐述

  • 定义与背景

    • 模型:单位球(或半径为 radius 的球)上的两点最短路径位于穿过两点与球心的“大圆”上,其长度为球心夹角乘以半径。
    • 输入坐标系:以 (f, t) 表示球面坐标,其中
      • f:方位角(经度),相对 x 轴在 xy 平面的极角
      • t:天顶角(余纬),相对 z 轴的夹角(t=0 为北极)
    • 典型场景:地理/导航的球面距离、球面最近路由、球面插值与采样步长设定等。
  • 接口/数据结构(据实现)

    • 函数签名:double sphericalDistance(double f1, double t1, double f2, double t2, double radius)
      • 参数单位:f1,f2,t1,t2 均为弧度;radius 为长度单位(米/千米等),返回值与其同单位
    • 协同实体:
      • 若已有笛卡尔坐标,可直接通过向量夹角计算再乘 radius
      • 040-几何-三维点039-几何-点 的向量原语可协同完成“坐标转化/夹角”
  • 核心流程/要点

    1. 球面坐标转笛卡尔坐标(文件注释方案)
      • x = sin(t)·cos(f)
      • y = sin(t)·sin(f)
      • z = cos(t)
      • 得到两点 u、v 后,欧氏差 d = |u−v|
      • 球面弧长 s = radius · 2 · asin(d/2)
    2. 夹角法(等价形式)
      • 以点积得到夹角:c = clamp(u·v, −1, 1);α = acos(c)
      • 返回 s = radius · α
      • 与上式等价,差别仅在反三角函数的数值表现
    3. 数值稳定性与选择
      • 小角度时,2·asin(d/2) 具有良好的相对稳定性;点积法需对 c 做夹取以防 acos 域外
      • 近对跖点时(α≈π),d≈2;两种公式均可,但需统一 eps 约束与夹取
    4. 单位与量纲
      • 输入是弧度制;若外部以角度制供值,应先转弧度
      • 返回值的长度单位与 radius 一致
  • 复杂度与边界条件

    • 时间:O(1)
    • 边界:
      • 同一点:返回 0
      • 对跖点(相距 180°):α=π;弧长 = π·radius
      • 半径为 0:退化返回 0
    • 数值与精度:
      • 需对 dot(u,v) 做 clamp 以防因舍入导致的 |c|>1
      • 使用 double 可满足绝大多数场景;更高精度可使用 long double
      • 以 eps 统一“几乎重合/几乎对跖”的阈值,避免反三角函数不稳定
  • 变体/扩展

    • 已有笛卡尔坐标输入:跳过 (f,t)→(x,y,z) 转换,直接用夹角法
    • 返回球心夹角:若下游只需角度 α,可直接返回 α 而非弧长
    • 球面插值(slerp):在 u、v 间按角度比例插值得到球面中间点(实现不在本节点)
    • 地理坐标适配:经纬度与 (f,t) 的映射可在上游完成;本函数保持弧度制输入
    • 椭球近似限制:本节点基于完美球体;若需地球椭球模型,应改用专门大地测量公式(不在本节点)
  • 正确性要点与不变式

    • 单位球几何:弧长等于球心夹角乘以半径;两个方案(asin 与 acos)本质一致
    • 方向与闭式一致性:坐标转化后得到单位向量,保证 |u|=|v|=1,从而 dot、norm 等量计算保持简洁稳定
    • 夹取不变式:在浮点误差下保持 c∈[−1,1],保证 acos 有定义
  • 与相邻技术的对比与取舍

    • 与“平面投影距离”对比:平面近似仅适用于小范围;球面距离在全球尺度保持正确性
    • 与向量夹角法:二者等价;asin(d/2) 在小角时更稳健,acos(dot) 在实现上更直接
    • 040-几何-三维点:可直接利用点积与单位化接口,减少重复实现
    • 039-几何-点:二维向量原语可用于在局部图上近似,但不提供球面最短路

关联节点