我正在研究一个单位领域。我有兴趣在两个任意点之间的球体表面(测地线)上的一条海峡线上放置N个点。这些点的坐标是球面坐标(弧度)。
如何沿着这条线计算一组N个等间距点。我想在计算中考虑球体的曲率。
我正在使用python 2.7.9
答案 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给出。