Я пытаюсь создать анимированный GIF из «Игры жизни» Конвея. Я нашел способ использовать write.gif
из пакета caTools
. Проблема в том, что выходной gif очень маленький. Есть ли способ его увеличить?
if (!require("caTools")) install.packages("caTools")
library("caTools")
generate_life <- function(N = 40, prob = 0.4, frames = 100, filename = "GoL.gif"){
grid <- matrix(rbinom(N^2,1,prob), nrow=N, ncol=N)
output <- array(0, c(N, N, frames))
for (i in 1:frames)
{
shift2E = cbind(rep(0, N) , grid[, -N] )
shift2SE = rbind(rep(0, N), cbind(rep(0, N-1), grid[-N, -N]))
shift2S = rbind(rep(0, N), grid[-N,])
shift2SW = rbind(rep(0, N), cbind(grid[-N, -1], rep(0, N-1)))
shift2W = cbind(grid[, -1],rep(0, N))
shift2NW = rbind(cbind(grid[-1, -1], rep(0, N-1)), rep(0, N))
shift2N = rbind(grid[-1,], rep(0, N))
shift2NE = rbind(cbind(rep(0, N-1), grid[-1, -N]), rep(0, N))
nbhds <- shift2E + shift2SE + shift2S +
shift2SW + shift2W + shift2NW + shift2N + shift2NE
tmp <- grid
tmp[grid==0 & nbhds==3] <- 1 # Birth rule
tmp[grid==1 & nbhds < 2] <- 0 # Death rule
tmp[grid==1 & nbhds > 3] <- 0 # Death rule
grid <- tmp
output[,,i] <- nbhds
}
output <- output/max(output)
write.gif(output, filename, col="gray", delay=5, scale = "always")
}
generate_life(N = 100,prob = 0.4,frames = 200)