gpt4 book ai didi

python - voronoi 和 lloyd 放松使用 python/scipy

转载 作者:太空狗 更新时间:2023-10-30 03:03:54 24 4
gpt4 key购买 nike

如何使用 Qhull 确定哪些 voronoi 单元(按索引)是“正确的”(由“现有顶点”组成)

我正在尝试使用 LLoyds 算法和由 scipy.spatial Voronoi(它是 Qhull 的包装器)生成的输入执行约束松弛。

就代码而言,它看起来像:

points = [n  for n in itertools.product(xrange(3),xrange(3))]
vor = Voronoi(points)

vor2 = lloyd(vor) # my relaxation function - not relevant to the question

代码生成的输出图看起来没问题(见下文)但是 vor 结构中的数据不足以执行 Lloyds 松弛。这是因为我应该只移动有效 voronoi 单元格内的点(图像中的 #4)。另一个应该保持原样。 Qhull 打乱了点/区域的顺序,所以我无法估计哪个区域属于哪个点。

下面是问题的说明:

print vor.vertices
#[[ 0.5 0.5]
# [ 1.5 0.5]
# [ 0.5 1.5]
# [ 1.5 1.5]]

print vor.regions
# [[], [-1, 0], [-1, 1], [1, -1, 0], [3, -1, 2], [-1, 3], [-1, 2], [3, 2, 0, 1], [2, -1, 0], [3, -1, 1]]

print vor.points
# [[ 0. 0.]
# [ 0. 1.]
# [ 0. 2.]
# [ 1. 0.]
# [ 1. 1.]
# [ 1. 2.]
# [ 2. 0.]
# [ 2. 1.]
# [ 2. 2.]]
print vor.point_region
# [1 8 6 3 7 4 2 9 5]

现在我应该以某种方式发现 vor.regions[7] 是一个属于点 vor.points[4] 的区域。如何实现?

Voronoi on 3x3 grid

最佳答案

你有一个你知道的 region,一个你不知道的 point,而且你知道 vor.point_region[point] == region。对于单个region,可以算出对应的point为:

point = np.argwhere(vor.point_region == region)

您还可以创建一个region_point 索引数组来从regions 数组中找出多个,如下所示:

region_point = np.argsort(vor.point_region)
points = region_point[regions-1]

关于python - voronoi 和 lloyd 放松使用 python/scipy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17637244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com