在测地线上的点

时间:2014-12-22 15:04:12

标签: python 3d scipy computational-geometry

我正在研究一个单位领域。我有兴趣在两个任意点之间的球体表面(测地线)上的一条海峡线上放置N个点。这些点的坐标是球面坐标(弧度)。

如何沿着这条线计算一组N个等间距点。我想在计算中考虑球体的曲率。

我正在使用python 2.7.9

2 个答案:

答案 0 :(得分:3)

您可以考虑SLERP - spherical linear interpolation

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

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

答案 1 :(得分:2)

让我们推理几何。

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

从中心到P0和P1的位置矢量之间的角度由点积

给出
cos A = P0.P1

构建这些的线性组合:

P = (1-t).P0 + t.P1

P和P0之间的角度由带有P归一化的点积给出

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

t²(-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中围绕轴使用Rodrigue's rotation formula。轴由交叉积P0 x P1给出。