Я хотел бы создать диаграмму Вороного вокруг 2D полигонов. Этот вопрос чем-то похож на этот здесь адресован для Python.
Просто, как это работает для точек, ниже приведен пример с функцией sf::st_voronoi()
:
library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
p <- rbind(c(3.2,4),
c(3,4.6),
c(3.8,4.4),
c(3.5,3.8),
c(3.4,3.6),
c(3.9,4.5))
plot(p, pch = 16)
p %>% st_multipoint() %>% st_voronoi() %>% plot(col = NA, add = TRUE)
Создано 28 мая 2020 г. пакетом REPEX (v0.3.0)
Но когда я попробуйте ту же функцию для некоторых сгенерированных многоугольников, я не получаю желаемых результатов:
library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
p1 <- rbind(c(0,0), c(1,0), c(3,2), c(2,4), c(1,4), c(0,0))
p2 <- rbind(c(3,0), c(4,0), c(4,1), c(3,1), c(3,0))
pol <- st_multipolygon(list(list(p1), list(p2)))
plot(st_voronoi(pol), col = NA, lwd = 2, lty = 3)
plot(pol, col = rgb(1,0,0, alpha = 0.3), add = TRUE)
Создано 28.05.2020 пакет REPEX (v0.3.0)
Кажется, что сетка Вороного основана на вершинах многоугольников, что имеет смысл. Однако я хотел бы получить сетку Вороного, окружающую красные многоугольники и не пересекающую их, то есть рассматривать многоугольник как точку. Обратите внимание, что получение центроидов многоугольников (например, с помощью sf::st_centroid
) и затем создание сетки Вороного - это путь, который я пробовал, но сетка Вороного все равно будет пересекать многоугольники.