我有一个4x4的正方形,可以在其中以1为单位垂直或水平绘制线条。结果看起来像这样(作为示例)。
鉴于此问题,如何识别构成该图像的3个多边形?
我知道片段所在的大正方形也是一个多边形,但是我只对“基础”多边形感兴趣-不知道这是否是正确的称呼方式。
澄清:我们仅从输入直线就知道它们的坐标,而我们事先并不知道这些多边形。
相应地,解决方案将是多边形本身(使用伪代码):
pol[1] = c(0, 0),
c(1, 0),
c(1, 1),
c(2, 1),
c(2, 2),
c(1, 2),
c(1, 3),
c(0, 3),
c(0, 0)
pol[2] = c(1, 0),
c(3, 0),
c(3, 4),
c(0, 4),
c(0, 3),
c(1, 3),
c(1, 2),
c(2, 2),
c(2, 1),
c(1, 1),
c(1, 0)
pol[3] = c(3, 0),
c(4, 0),
c(4, 4),
c(3, 4),
c(3, 0)
答案 0 :(得分:1)
这是在R中创建空间对象的一种方法。pol_sf
是最终输出,它是sf
对象。此方法需要sf
软件包。 tidyverse
包不是必需的,但可以在sf
对象上很好地工作。
library(tidyverse)
library(sf)
# Polygon 1
pol1 <- st_polygon(list(rbind(c(0, 0),
c(1, 0),
c(1, 1),
c(2, 1),
c(2, 2),
c(1, 2),
c(1, 3),
c(0, 3),
c(0, 0))))
# Polygon 2
pol2 <- st_polygon(list(rbind(c(1, 0),
c(3, 0),
c(3, 4),
c(0, 4),
c(0, 3),
c(1, 3),
c(1, 2),
c(2, 2),
c(2, 1),
c(1, 1),
c(1, 0))))
# Polygon 3
pol3 <- st_polygon(list(rbind(c(3, 0),
c(4, 0),
c(4, 4),
c(3, 4),
c(3, 0))))
# Combine pol1, pol2, and pol3
pol_sfc <- st_as_sfc(list(pol1, pol2, pol3))
# Create an sf object
pol_sf <- tibble(ID = c("a", "b", "c")) %>%
mutate(geometry = pol_sfc) %>%
st_as_sf()
# Plot the data
ggplot(pol_sf) + geom_sf(aes(fill = ID))