一个测地线上的点

3

我正在处理一个单位球。我希望在球面(测地线)上两个任意点之间沿着一条直线放置N个点。这些点的坐标以球坐标(弧度)表示。

如何计算沿着这条直线的N个等间距点集。我希望在计算中考虑球体的曲率。

我使用的是Python 2.7.9。


也许这会有帮助:https://dev59.com/vozis4cB2Jgan1znbgin - ρss
我看到了这个问题,但我认为它并不相关,因为我正在处理一个真实的球体,而不是一个大地测量椭球体。 - Christine Darcoux
在URL中,“Geod”指的是大地测量。而“Geoid”则完全不同。此外,使用geographiclib提供的建议答案适用于球体和椭球体。 - Ralph Tee
2个回答

3

您可以考虑使用球面线性插值(SLERP)

P = P0*Sin(Omega*(1-t))/Sin(Omega) + P1*Sin(Omega * t)/Sin(Omega)

其中Omega是起点和终点之间的中心角(大圆弧),t是参数范围为[0..1],对于第i个点t(i) = i/N


2

让我们从几何角度来思考。

将给定的两个点转换为笛卡尔坐标。

从中心到P0和P1的位置向量之间的夹角由点积给出。

cos A = P0.P1

构建这些的线性组合:
P = (1-t).P0 + t.P1

通过将P归一化,可以用点乘来计算P和P0之间的夹角。

cos a = cos kA/N = P.P0/|P| = ((1-t) + t.cos A)/ sqrt((1-t)² + 2.(1-t).t.cos A + t²)

平方并重写后,您可以得到一个关于 t 的二次方程:
cos²a.(1-t)² + 2.(1-t).t.cos²a.cos A + t².cos²a - (1-t)² - 2.(1-t).t.cos A - t².cos²A = 0

- sin²a.(1-t)² - 2.(1-t).t.sin²a.cos A - t².(cos²A - cos² a) = 0(-sin²a + 2.sin²a.cos A - cos²A + cos²a) + 2.t.sin²a.(1 - cos A) - sin²a = 0

解方程,根据其定义计算向量P并将其归一化。
然后转换为球面坐标。在1到N-1之间变化的k将给出所需的中间点。
或者,您可以使用3D中绕轴旋转的罗德里格斯旋转公式。该轴由叉积P0 x P1给出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接