El código de
ayer para
dibujar los patrones (que @moebio llama ahora
textiles) no era muy adecuado para entenderlos pues se concentraba,
sobre todo, en dibujarlos. Una representación matricial resultaría más
apropiada.
Una forma de hacerlo es imaginar que cada cuadrado de la cuadrícula puede
ser de uno de cuatro tipos: o tiene una línea abajo (2), o tiene una línea
a la derecha (3), o tiene ambas (2+3), o no tiene ninguna (0).
Así, dadas un par de sucesiones binarias que sirvan de semilla de filas
y columnas, el textil puede ser representado por una matriz con entradas
dentro de {0, 2, 3, 5}.
Esta función, que aprovecha las capacidades de numpy, permite generarla:
Asume que row_seed y col_seed son arreglos de numpy, tienen la misma
longitud, y esta es igual a N. Me gusta que los textiles sean
cuadrados.
Por ejemplo, con semillas [0, 1, 0, 1, 0] y [0, 0, 1, 0, 0] (N=5)
obtenemos:
Desde ayer, @zubie7a
y @moebio están coloreando textiles
(1
y 2)
y aquí el primero compartió su código.
Con sus ideas adaptadas a mi codificación, la clave de la coloreada
resulta ser un algoritmo BFS (Breadth-first
search) que permita
reconocer regiones contiguas. Esencialmente, para cada punto de la matriz
que no tenga una región asignada aún se asigna una región y después se
recorre el textil buscando otros miembros de la región utilizando las
barreras como límite de la búsqueda.
Esto en código se ve así:
Con BFS definido así:
Con este truco, podemos colorear el textil de arriba fácilmente usando,
por ejemplo:
Aquí un textil de 80x80 generado con semillas al azar: