我正在处理一个单位球。我希望在球面(测地线)上两个任意点之间沿着一条直线放置N个点。这些点的坐标以球坐标(弧度)表示。
如何计算沿着这条直线的N个等间距点集。我希望在计算中考虑球体的曲率。
我使用的是Python 2.7.9。
我正在处理一个单位球。我希望在球面(测地线)上两个任意点之间沿着一条直线放置N个点。这些点的坐标以球坐标(弧度)表示。
如何计算沿着这条直线的N个等间距点集。我希望在计算中考虑球体的曲率。
我使用的是Python 2.7.9。
您可以考虑使用球面线性插值(SLERP)。
P = P0*Sin(Omega*(1-t))/Sin(Omega) + P1*Sin(Omega * t)/Sin(Omega)
其中Omega是起点和终点之间的中心角(大圆弧),t是参数范围为[0..1],对于第i个点t(i) = i/N
让我们从几何角度来思考。
将给定的两个点转换为笛卡尔坐标。
从中心到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²)
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