单位球面上两个“ P =(x,y,z)”点之间的大圆距离

时间:2018-09-06 19:24:41

标签: python coordinates distance trigonometry

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

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

2 个答案:

答案 0 :(得分:2)

泛化为半径为R的球体,以便使表达式和变量的物理尺寸始终清晰可见,我们绘制了下图,您可以在包含三个点的平面上看到点<球表面上的em> A 和 B 以及点 O ,球的中心以及连接< em> A 和 B

enter image description here

参考图形及其中的文字,您可以像这样计算点 A B 之间的距离:

  1. 计算距离Δ = math.sqrt((x_B-x_A)**2+(y_B-y_A)**2+(z_B-z_A)**2)
  2. 计算Δφ = math.asin((d/2/R)的一半的角度
  3. 大圆上的距离为gc_dist = 2*phi*R

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

答案 1 :(得分:0)

在撰写本文时,the Wikipedia page for Great-circle distance是有关此主题的绝佳资源。

以及the method explained by gboffi,它是the same method from chord length as seen on Wikipedia的提法,但就两点的笛卡尔坐标而言,维基百科页面上还有其他一些有用的方法。

我想请您注意the vector version,它很自然地可以计算出笛卡尔坐标系中表示的单位球面上两个点之间的中心角(从而得出较大的圆距)。假设这些点位于以原点为中心的单位球体上,则这些点可以解释为法向矢量,并且可以“使用点积,叉积或组合”来计算中心角。

如果球体不是原点的单位球体,则可以简单地从两个点减去球体中心的坐标以使其居中,然后对两个点进行归一化,使其大小为一。