R - 绘制六边形镶嵌

Nat*_*han 6 plot r hexagonal-tiles tesselation spatstat

我想生成一些方形图,里面有六边形数组,就像这里绘制的一样。我想绘制常规(几何规则)和异常六边形镶嵌,所以我认为“sp”包中的工具不起作用。

下面是我使用 owin 和 plot 进行正六边形镶嵌的尝试。


library(maptools)
library(spatstat)

twid <- 20
theight <-  20
sideL <- 2
rp1 <- (sideL/2)*sqrt(3)
rp2 <- 2*(sideL/2)*sqrt(3)
rp3 <- 3*sideL

    bx <- c(1:floor(twid/rp3))
    by <- c(1:floor(theight/rp3))
    hex_array1 <- list(bx)
    hex_array2 <- list(by)

    for(i in 1:ceiling(twid/rp3)){
        bx[i] <- list(x=c(0+rp3*i,1+rp3*i,3+rp3*i,4+rp3*i,3+rp3*i,1+rp3*i)) 
        by[i] <- list(y=c(rp1,rp2,rp2,rp1,0,0))
            hex_array1[i] <- bx[i]
            hex_array2[i] <- by[i]
    }

    har1 <- list(x=c(0,1,3,4,3,1), y=c(rp1,rp2,rp2,rp1,0,0))

    har2 <- list(x=hex_array1,y=hex_array2)


hexig <- owin(poly=list(list(x=c(0,twid,twid,0), y=c(0,0,theight,theight)),
                        har1, har2
                        )
                )
    plot(hexig)
Run Code Online (Sandbox Code Playgroud)

但是,由于 har2 未正确格式化为列表列表,因此上述内容似乎出错了。

以上显然仅适用于单行六边形,但我想一旦获得第一行,我只需将单行包装在 for 循环中,为每行添加一组 x 和 y 距离。我只是不知道如何格式化 har2 以便我可以将它直接插入到 owin 的 poly 函数中。

我愿意完全改变我完成上述工作的方式,我对 R 还是比较陌生,所以我绝对仍然不知道如何以最有效/最优雅的方式做事。我目前在运行 RStudio V0.99.903 的 Win 10 x64 上运行 R 版本 3.3.2

任何帮助表示赞赏。

谢谢!

Ege*_*bak 5

我认为spatstat正是您正在寻找的功能:hextessaffine.tess

看一下 的示例affine.tess。以下是您可以执行的操作的示例(添加trim = FALSE以避免边界框):

library(spatstat)
H <- hextess(square(5), 0.2)
plot(H)
Run Code Online (Sandbox Code Playgroud)

shear <- matrix(c(1,0,0.6,1), 2, 2)
sH <- affine(H, shear)
plot(sH)
Run Code Online (Sandbox Code Playgroud)