我一直在寻找这个问题的答案,但找不到任何有用的答案。
我正在使用python科学计算堆栈(scipy、numpy、matplotlib),我有一组二维点,我使用scipy.spatial.Delaunay
计算Delaunay训练规则(wiki)。
我需要编写一个函数,给定任何点a
,它将返回所有其他点,这些点是任何单纯形(即三角形)的顶点,a
也是(三角剖分中a
的邻居)的顶点。然而,scipy.spatial.Delaunay
(here)的文档非常糟糕,我一生都无法理解如何指定simplices,或者我将继续这样做。即使只是解释一下Delaunay输出中的neighbors
、vertices
和vertex_to_simplex
数组是如何组织的,也足以让我开始工作。
非常感谢你的帮助。
上面描述的方法在所有的simplice中循环,如果有大量的点,可能需要很长的时间。更好的方法可能是使用Delaunay.vertex_neighbor_vertices,它已经包含了所有关于邻居的信息。不幸的是,提取信息
下面的代码演示如何获取某些顶点(在本例中为17)的索引:
我自己想出来的,所以这里有一个解释,任何未来的人谁是困惑这一点。
作为一个例子,让我们使用我在代码中使用的简单点格,我生成如下
这里的细节并不十分重要,可以说它生成了一个规则的三角形晶格,其中一个点与其六个最近邻中的任何一个点之间的距离为1。
绘制它
现在计算三角剖分:
让我们看看这给了我们什么。
输出:
很简单,就是上面所示的晶格中所有九个点的数组。我们来看看:
输出:
在这个数组中,每一行表示三角剖分中的一个单纯形(三角形)。每行中的三个条目是我们刚才看到的点数组中单纯形顶点的索引。例如,这个数组中的第一个单纯形
[4, 3, 6]
由以下点组成:通过在一张纸上绘制晶格,根据其索引标记每个点,然后跟踪
triang.vertices
中的每一行,很容易看出这一点。这是我们编写我在问题中指定的函数所需的全部信息。 看起来像:
就这样!我相信上面的函数可以做一些优化,这正是我几分钟后想到的。如果有人有任何建议,请随时张贴。希望这能帮助将来像我一样困惑的人。
以下是James Porter自己的简单单行本,使用列表理解:
相关问题 更多 >
编程相关推荐