给定一个正方形内的一组简单图形坐标,如何识别所有基本多边形?

时间:2019-03-24 00:59:14

标签: r geometry coordinates

我有一个4x4的正方形,可以在其中以1为单位垂直或水平绘制线条。结果看起来像这样(作为示例)。

enter image description here

鉴于此问题,如何识别构成该图像的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)

1 个答案:

答案 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))

enter image description here