我从两个不同的numpy顶点数组构造两个Delaunay三角。
它们有两个相同的三角形,我想从其中一个三角剖分名单中删除。
如果有人能帮我,我会很感激的。提前谢谢。
cloud1 = numpy.array([[4.2, 4.5], [4.4, 5.3], [6.2, 5.6], [4.75, 5], [5.2, 4.8]])
cloud2 = numpy.array([[4.2, 4.5], [4.4, 5.3], [6.2, 5.6], [4.75, 5]])
tri1 = scipy.spatial.Delaunay(cloud1)
tri2 = scipy.spatial.Delaunay(cloud2)
print(tri1.simplices)
print("*************")
print(tri2.simplices)
它给出了
[[1 3 2]
[3 4 2]
[3 1 0]
[4 3 0]]
*************
[[2 3 0]
[3 1 0]
[1 3 2]]
这是我写的,但不管用。
for i in range(0,len(tri1.simplices)):
if (tri1.simplices[i] in tri2.simplices):
numpy.delete(tri1.simplices, tri1.simplices[i])
else:
continue
发布于 2022-10-27 06:22:41
如果要从Delaunay三角剖分中删除三角形,则在Delaunay三角剖分中是不可能的。有从三角剖分中去除点的算法,在被删除点的区域内重建三角剖分。然而,据我所知,它们并没有在席比的Delaunay三角剖分中实现。
不过,如果您只想比较两个三角剖分并从简单列表中删除三角形(例如用于绘图),那么您可以复制简单列表并像在this answer中那样操作这个副本。
请注意,在您的问题中,您直接比较了简单列表。然而,simplices数组保存的是点的索引,而不是点本身。你可能想做的是比较点的数组,而不是指数。例如,使用这样的代码:
tr1 = tri1.simplices[0] # indices of first triangle in tri1
pts1 = tri1.points[tr1, :] # pts1 is a 3x2 array of the first triangle coordinates
或者得到完整的三角形点数组:
tri1_pts = tri1.points[tri1.simplices] # (n, 3, 2) array - triangles as points (not indices)
https://stackoverflow.com/questions/74201215
复制