Kar*_*oki 3 python voronoi scipy
我写了一个小脚本来显示本教程M
中点的voronoi 图。我用.scipy.spatial
我想给出一个新的平面点,并说这个点在 voronoi 图的哪个位置。是否可以?
这是我的代码:
import random
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Voronoi, voronoi_plot_2d
N = 70
M = 10
Matrix = [(random.random()*100,random.random()*100) for x in range(M)]
points = np.array(Matrix)
vor = Voronoi(points)
print(vor.ridge_vertices)
voronoi_plot_2d(vor)
plt.show()
Run Code Online (Sandbox Code Playgroud)
小智 7
根据Voronoi图的概念,新点P所属的单元由原点中距离P最近的点生成。找到这一点是直接最小化距离:
point_index = np.argmin(np.sum((points - new_point)**2, axis=1))
Run Code Online (Sandbox Code Playgroud)
但是,您要查找region。不幸的vor.regions
是vor.points
,中的区域与 的顺序不同(我真的不明白为什么,因为每个点都应该有一个区域)。
所以我使用了以下方法:
vor.ridge_points
结果:
M = 15
points = np.random.uniform(0, 100, size=(M, 2))
vor = Voronoi(points)
voronoi_plot_2d(vor)
new_point = [50, 50]
plt.plot(new_point[0], new_point[1], 'ro')
point_index = np.argmin(np.sum((points - new_point)**2, axis=1))
ridges = np.where(vor.ridge_points == point_index)[0]
vertex_set = set(np.array(vor.ridge_vertices)[ridges, :].ravel())
region = [x for x in vor.regions if set(x) == vertex_set][0]
polygon = vor.vertices[region]
plt.fill(*zip(*polygon), color='yellow')
plt.show()
Run Code Online (Sandbox Code Playgroud)
这是一个演示:
请注意,如果区域是无界的,则该区域的着色将不正确;这是简单的着色方法的缺陷,而不是区域查找算法的缺陷。有关为无界区域着色的正确方法,请参阅着色Voronoi 图。
旁白:我用 NumPy 生成随机数,比你做的简单。
归档时间: |
|
查看次数: |
1868 次 |
最近记录: |