Factorización de enteros con grid
Vi esto y me dije: yo también quiero. Así que dicho y hecho:
Por si acaso, cada diagrama representa la descomposición en números primos de un número del 1 al 100.
El código (que no he adecentado lo que suelo) es un pequeño ejercicio con el paquete grid
y unos elementos de recursividad (como en Grid, Scala y arbolitos fractales):
library(grid)
library(gmp)
plot.factors <- function(n, new.plot = TRUE){
if(new.plot)
grid.newpage()
divisors <- sort(as.integer(factorize(n)), decreasing = T)
foo <- function(divs){
if(length(divs) == 0){
grid.circle(x = 0.5, y = 0.5, r = 0.5,
gp=gpar(fill="black"))
return()
}
n <- divs[1]
x <- (Re(exp( 2 * pi *(1:n) * 1i /n))) / 4 + 0.5
y <- (Im(exp( 2 * pi *(1:n) * 1i /n))) / 4 + 0.5
for(i in 1:n){
tmp <- viewport(x = x[i], y = y[i],
w = 2/(3 + n), h = 2/(3 + n))
pushViewport(tmp)
#grid.rect(gp = gpar(col = "grey"))
foo(divs[-1])
popViewport()
}
}
foo(divisors)
}
plot.factors(25)
grid.newpage()
nrow <- 10
ncol <- 10
for(y in 1:nrow){
for(x in 1:ncol){
tmp <- viewport(x = x / (1 + ncol), y = 1 - y / (1 + nrow),
w = 1/(1 + ncol), h = 1/(1+ncol))
pushViewport(tmp)
#grid.rect(gp = gpar(col = "grey"))
plot.factors(x + y * ncol - ncol, new.plot = FALSE)
popViewport()
}
}