在scipy.spatial.Delaunay python中查找点所属的所有简单化

在scipy.spatial.Delaunay python中查找点所属的所有简单化,python,scipy,graph-theory,discrete-mathematics,delaunay,Python,Scipy,Graph Theory,Discrete Mathematics,Delaunay,在使用scipy.spatial.Delaunay的Delaunay三角剖分中,是否有任何方法可以获得某个点所包含的所有简单/三角形 我知道有一个find_simplex()函数,它只返回一个点所属的三角形,但我想得到它所属的所有三角形 因此,在本例中,当我对点6执行find_simplex()时,它只返回三角形2,但我希望它返回三角形1、2、3、4、10和9,因为点6是所有这些三角形的一部分 任何帮助都将不胜感激 你不想找到单纯形,因为它是几何的,而不是拓扑的。也就是说,它将一个点视为一个位

在使用
scipy.spatial.Delaunay
的Delaunay三角剖分中,是否有任何方法可以获得某个点所包含的所有简单/三角形

我知道有一个
find_simplex()
函数,它只返回一个点所属的三角形,但我想得到它所属的所有三角形

因此,在本例中,当我对点6执行
find_simplex()
时,它只返回三角形2,但我希望它返回三角形1、2、3、4、10和9,因为点6是所有这些三角形的一部分


任何帮助都将不胜感激

你不想
找到单纯形,因为它是几何的,而不是拓扑的。也就是说,它将一个点视为一个位置,而不是三角剖分的一个组成部分:几乎所有的点都位于一个单纯形中,所以这就是它报告的内容

相反,请使用顶点编号。简单的答案是使用
simplices
属性:

vert=6
[i for i,s in enumerate(d.simplices) if vert in s]

有了更多的代码,就可以使用和
邻域属性更有效地搜索。

通过

def get_simplices(self, vertex):
    "Find all simplices this `vertex` belongs to"
    visited = set()
    queue = [self.vertex_to_simplex[vertex]]
    while queue:
        simplex = queue.pop()
        for i, s in enumerate(self.neighbors[simplex]):
            if self.simplices[simplex][i] != vertex and s != -1 and s not in visited:
                queue.append(s)
        visited.add(simplex)
    return np.array(list(visited))
例如:

import scipy.spatial
import numpy as np
np.random.seed(0)
points = np.random.rand(10, 2)
tri = scipy.spatial.Delaunay(points)
vertex = 2
simplices = get_simplices(tri, vertex)
# 0, 2, 5, 9, 11
neighbors = np.unique(tri.simplices[simplices].reshape(-1)])
# 0, 1, 2, 3, 7, 8
可视化:

import matplotlib.pyplot as plt
plt.triplot(points[:,0], points[:,1], tri.simplices)
plt.plot(points[neighbors,0], points[neighbors,1], 'or')
plt.plot(points[vertex,0], points[vertex,1], 'ob')
plt.show()

发布您的源代码尝试