Я пытаюсь вычислить точные границы каждой области диаграммы Вороного, используя scipy.spatial.Voronoi, в случае, когда все точки находятся внутри заранее заданного многоугольника.
Например, используя пример в документации,
http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.spatial.Voronoi.html что, если мне нужно вычислить Voroni с теми же точками, но внутри прямоугольника со следующими границамиglobal_boundaries = np.array([[-2, -2], [4, -2], [4, 4], [-2, 4], [-2, -2]])
и мне нужно вычислить точные границы каждой области voronoi, например?
voronoi_region_1_boundaries = [[-2, -2], [0.5, -2], [0.5, 0.5], [-2, 0-5], [-2, -2]]
voronoi_region_2_boundaries = [[-2, 1.5], [0.5, 1.5], [0.5, 4], [-2, 4], [-2, 1.5]]
voronoi_region_3_boundaries = [[-2, 0.5], [0.5, 0.5], [0.5, 1.5], [-2, 1.5], [-2, 0.5]]
и т.д. для всех 9 областей вместо
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]]
Как вычислить недостающую конечную точку бесконечного гребня?
Я попытался адаптировать этот код http://nbviewer.ipython.org/gist/pv/8037100
связанный с этой проблемой Раскрасить диаграмму Вороного
но он работает только для округлых границ. Я изменил его с учетом радиуса, так что моя область полностью находится внутри круга, а затем вычисляет пересечение между линией, соединяющей точки и окружность и границы. Это работает, но только для первого пункта, и после этого у меня есть "GEOMETRYCOLLECTION EMPTY".
direction = np.sign(np.dot(midpoint - center, n)) * n
super_far_point = vor.vertices[v2] + direction * radius
line_0 = LineString([midpoint, super_far_point])
for i in range(0, len(map_boundaries)-1):
i += 1
line_i = LineString([(map_boundaries[i-1]), (map_boundaries[i])])
if line_0.intersection(line_i) != 0:
far_point = line_0.intersection(line_i)
new_region.append(len(new_vertices))
new_vertices.append(far_point.tolist())
Кто-нибудь когда-либо решал подобную проблему?
Может ли кто-нибудь помочь?