测地线上的点

2024-05-12 23:49:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究单位球体。我有兴趣把N个点放在球面(测地线)上任意两点之间的一条直线上。这些点的坐标以球坐标(弧度)表示。在

如何计算沿这条线的N个等距点集。我想在计算中考虑到球面的曲率。在

我使用的是python2.7.9


Tags: 单位直线兴趣球面球体等距曲率弧度
2条回答

让我们几何推理。在

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

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

cos A = P0.P1

构建以下各项的线性组合:

^{pr2}$

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×P1给出。在

你可以考虑SLERP - spherical linear interpolation

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

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

相关问题 更多 >