Соедините две точки на поверхности сферы - PullRequest
0 голосов
/ 24 августа 2018

Мне нужно соединить две точки, которые лежат на сфере, таким образом, чтобы линия (край) оставалась на поверхности сферы и не проходила через нее.

На данный момент у меня есть:

  1. Эта сфера: Равномерно распределяет n точек на сфере

  2. Границы нанесены, но они проходят через сферу.

  3. Желаемый результат:

1 Ответ

0 голосов
/ 24 августа 2018

Вот реализация сферической линейной интерполяции или 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

...