Получение точек в выпуклом корпусе - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть два перекрывающихся набора точек T и B.

Я хочу вернуть все точки из T, которые находятся внутри выпуклой оболочки B Я вычисляю выпуклые оболочки следующим образом

from scipy.spatial import Convexhull
import numpy as np
T=np.asarray(T)
B=np.asarray(B)

Thull = ConvexHull(T)
Bhull = ConvexHull(B)

Как мне выполнить пространственный запрос?

1 Ответ

0 голосов
/ 10 ноября 2018

Вот пример того, что вы хотите, используя функцию, определенную в другом вопросе Я разместил в комментариях:

from scipy.spatial import Delaunay
import numpy as np
import matplotlib.pyplot as plt

def in_hull(p, hull):
    """
    Test if points in `p` are in `hull`

    `p` should be a `NxK` coordinates of `N` points in `K` dimensions
    `hull` is either a scipy.spatial.Delaunay object or the `MxK` array of the 
    coordinates of `M` points in `K`dimensions for which Delaunay triangulation
    will be computed
    """
    if not isinstance(hull,Delaunay):
        hull = Delaunay(hull)

    return hull.find_simplex(p)>=0

T = np.random.rand(30,2)
B = T + np.array([[0.4, 0] for i in range(30)])

plt.plot(T[:,0], T[:,1], 'o')
plt.plot(B[:,0], B[:,1], 'o')


new_points = T[in_hull(T,B)]

plt.plot(new_points[:,0], new_points[:,1], 'x', markersize=8)

Находит все точки T в корпусе B и сохраняет их в new_points. Я также заговор, чтобы вы увидели результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...