如何找到一个点位于ConvexHull的内部或外部?

时间:2014-02-11 10:03:18

标签: numpy convex-hull

我在numpy中有点数组,我通过(scipy.spatial.ConvexHull而不是scipy.spatial.Delaunay.convex_hull)来计算它们的ConvexHull,现在我想知道我是否在我的数组中添加新点是这一点在于点云的凸壳与否?在numoy中最好的方法是什么?

我应该提一下,我看到这个question它没有解决我的问题(因为它使用cipy.spatial.Delaunay.convex_hull来计算ConvexHull)

1 个答案:

答案 0 :(得分:1)

我知道这个问题很旧,但是如果有人像我一样找到它,这是答案: 我正在使用scipy 1.1.0和python 3.6

def isInHull(P,hull):
    '''
    Datermine if the list of points P lies inside the hull
    :return: list
    List of boolean where true means that the point is inside the convex hull
    '''
    A = hull.equations[:,0:-1]
    b = np.transpose(np.array([hull.equations[:,-1]]))
    isInHull = np.all((A @ np.transpose(P)) <= np.tile(-b,(1,len(P))),axis=0)

在这里,我们使用所有计划的方程式确定该点是否在船体之外。我们从不构建Delaunay对象。此函数将n个维度中m个点的数组作为P mxn的输入。使用

构造船体
hull = ConvexHull(X)

其中X是p个点的pxn数组,这些点构成应在其上构造凸包的点云。