单位球体上两 "P = (x, y, z)" 点之间的大圆距离

Great Circle Distance between two "P = (x, y, z)" points on a unit sphere

我需要使用单位球体上的坐标 (x, y, z) 计算两点之间的距离。

Haversine and Great Arc Distance都使用φλ(经度和纬度)。我如何为 x、y、z 编写这些公式?

泛化到一个半径为R的球体,使得表达式和变量的物理维度总是显而易见的,我们绘制下图,你可以看到,在包含三个点的平面上,球面上的点 AB 以及球心点 O , 以及连接 AB.

的最小长度的弧

参考图中的文字,你可以这样计算点AB之间的距离:

  1. 计算距离Δ = math.sqrt((x_B-x_A)**2+(y_B-y_A)**2+(z_B-z_A)**2)
  2. 计算二分之一 Δ 的夹角,φ = math.asin((Δ/2/R))
  3. 大圆上的距离是gc_dist = 2*phi*R.

(您可能想使用 R = 1)。

在我撰写本文时,the Wikipedia page for Great-circle distance 是关于该主题的极好资源。

, which is a formulation of the same method from chord length as seen on Wikipedia一样,但是就两点的笛卡尔坐标而言,维基百科页面上还有一些其他有用的方法。

我会提请您注意 the vector version,它非常适合计算以笛卡尔坐标表示的单位球体上两点之间的圆心角(以及大圆距离)。假设点位于以原点为中心的单位球体上,则可以将这些点解释为法向量,并且可以计算圆心角 "using the dot product, cross product, or a combination."

如果球体在原点处不是单位球体,你可以简单地从两个点中减去球体中心的坐标使它们居中,然后将两个点归一化,使它们的大小为1。