Ich wollte das Gebiet der Boronoi-Karte finden, aber es fiel mir schwer, den Artikel zu finden, in dem nach dem Gebiet gefragt wurde, deshalb möchte ich es als Memo aufschreiben.
Ich werde den Code sofort setzen.
def voronoi_area(points):
v = Voronoi(points)
vol = np.zeros(v.npoints)
for i, reg_num in enumerate(v.point_region):
indices = v.regions[reg_num]
if -1 in indices:
vol[i] = np.inf
else:
vol[i] = ConvexHull(v.vertices[indices]).volume
return vol
sample_points = [[-2, 6], [ 3, -8], [ 5, 9], [ 4, 5], [-7, 2], [ 3, 4]]
voronoi_area(sample_points)
# >>> [inf, inf, inf, 205.92126984, inf, 52.62380952]
Da es einen Teil gibt, der im Bereich der Boronoi-Figur unweigerlich unendlich wird, versuche ich, ihn als np.inf auszugeben. Wenn Sie verhindern möchten, dass es unendlich wird, sollten Sie es spiegeln. Ich denke, es ist notwendig, wenn man den Bereich des Boronoi-Diagramms von Athleten findet, deshalb werde ich es unten auflisten.
def voronoi_volumes(points, x_max, y_max):
points_len = np.shape(points)[0]
points1 = points.copy()
points1[:,1] = - points[:,1]
points2 = points.copy()
points2[:,1] = 2 * y_max - points[:,1]
points3 = points.copy()
points3[:,0] = - points[:,0]
points4 = points.copy()
points4[:,0] = 2 * x_max - points[:,0]
points = np.concatenate((points, points1, points2, points3, points4), axis=0)
v = Voronoi(points)
vol = np.zeros(v.npoints)
for i, reg_num in enumerate(v.point_region):
indices = v.regions[reg_num]
vol[i] = ConvexHull(v.vertices[indices]).volume
return vol[:points_len]
Geben Sie den Maximalwert der X-Achse in x_max und den Maximalwert der Y-Achse in y_max ein.
Ich denke, dass das Boronoi-Diagramm häufig bei der Analyse von Sportarten verwendet wird, daher hoffe ich, dass Sie es verwenden werden.
Recommended Posts