Grid

Factorización de enteros con grid

Vi esto y me dije: yo también quiero. Así que dicho y hecho:

100

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()
  }
}

Grid, Scala y arbolitos fractales

Inspirado por

  • los arbolitos que he visto esta mañana en mi semivuelta al lago de Zúrich,
  • las cosas que estoy leyendo últimamente sobre el paquete grid de R (p.e., grid graphics, de Murrell)
  • mi curso de scala y
  • este enlace

me he decidido a reescribirlo como Dios manda (y no como de primeras se le ocurriría a un neoingeniero al que solo le han enseñado MatLab y que, por lo tanto, tiene vetado el acceso a cualquier tipo de empresa tecnológica puntera). Me ha quedado así: