你的问题很重要:在一个椭球体上,甚至可能有不止一条垂直于 AB 到 C 的线。
如果距离很小,您可能会使用欧几里得近似值
Δx = R·cosα·Δλ
Δy = r·Δφ
r = b²/√(b² + (a² - b²)·cos²φ)
R·cosα = a²/√(a² + b²·tan²φ)
纬度φ,经度λ,长半轴a和短半轴b;球面近似a = b。 r 和 R·cosα 的公式中的 φ 必须是某种平均值。
metric on spheroid http://img263.imageshack.us/img263/3620/spheroid.gif
一种可能会产生更好结果的方法是在 3 空间(而不是在球体表面)解决问题,并获得与连接线相关的弧长。
为此,您需要知道如何将具有法线角度的地理坐标φ 转换为笛卡尔坐标
z = b²·sinφ/√(a²·cos²φ + b²·sin²φ)
r = a²·cosφ/√(a²·cos²φ + b²·sin²φ)
x = r·cosλ
y = r·sinλ
从极角α的地心坐标到笛卡尔坐标
z = a·b·sinα/√(a²·sin²α + b²·cos²α)
r = a·b·cosα/√(a²·sin²α + b²·cos²α)
x = r·cosλ
y = r·sinλ
请注意,这些公式中的r 与上图中的不同。
让A、B、C 成为与球体表面上的点相对应的欧几里得空间中的向量。垂直F 的脚为
F = 1/|B-A|² · (<B-A,C-A>·B - <B-A,C-B>·A)
其中<,> 是标量积,|·| 是范数。
现在,我们必须确定球体表面上与F 对应的点F',这意味着我们必须计算
λ' = atan2(y,x)
α' = arctan(z/√(x² + y²))
然后将它们转换回笛卡尔坐标。
割线的长度由下式给出
d = |F'- C|
球面近似对应的弧长为
s = R·β
其中β 是F' 和C 之间的角度,即
β = arccos(cosβ) = arccos(<F',C>/(|F'|·|C|))
而R 是由下式给出的平均半径
R = ³√(a²·b)
或使用余弦规则为小距离获得更好的价值
R = d/√(2·(1 - cosβ))