Как получить диаграмму Вороного вокруг полигонов - PullRequest
1 голос
/ 28 мая 2020

Я хотел бы создать диаграмму Вороного вокруг 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) и затем создание сетки Вороного - это путь, который я пробовал, но сетка Вороного все равно будет пересекать многоугольники.

...