连接球体表面上的两个点

时间:2018-08-24 14:51:11

标签: python connect points

我需要连接位于球体上的两个点,这样线(边)会停留在球体的表面上并且不会穿过球体。

现在我有:

  1. 此领域:Evenly distributing n points on a sphere

  2. 绘制了边缘,但它们穿过球体。

  3. 所需结果:

1 个答案:

答案 0 :(得分:1)

这是此spherical linear interpolation中提出的answer或slerp的实现:

import numpy as np
import matplotlib.pylab as plt

def slerp(p1, p2, t):
    omega = np.arccos( p1.dot(p2) )
    sin_omega = np.sin(omega)    
    t = t[:, np.newaxis]
    return ( np.sin( (1-t)*omega )*p1 + np.sin( t*omega )*p2 )/sin_omega

p1 = np.array([1, 0, 0])
p2 = np.array([0, 1, 0])
t = np.linspace(0, 1, 30)

arc = slerp(p1, p2, t)

plt.plot( arc[:, 0], arc[:, 1] );
plt.axis('square');

提供2D:

2D example