Quiero crear un diseño bidimensional de formas rectangulares, una cuadrícula compuesta de cubos de tamaño aleatorio. Los cubos deben encajar y tener un relleno o margen igual (espacio entre ellos). Algo así como un diseño de cómic, o más como la imagen adjunta.
¿Cómo podría hacer esto procesalmente?
Prácticamente, probablemente estaría usando Python y algún software gráfico para renderizar una imagen, pero no sé qué tipo de algoritmo (o qué) necesitaría usar para generar la cuadrícula aleatoria.
programming-practices
python
math
Mrwolfy
fuente
fuente
Respuestas:
Comience con una cuadrícula de 1x1 celdas. Elija un lugar aleatorio, combine celdas una cantidad aleatoria o hasta que choque con un rectángulo más grande.
Esto te dará algo similar a la imagen que proporciones.
Hay un problema mayor si no desea que varias celdas más pequeñas actúen como relleno entre sus celdas más grandes. Un cómic, por ejemplo, quiere minimizar la cantidad de espacio muerto y tener como máximo ~ 9 celdas. Podrías elegir algunos puntos y dibujar algunas líneas y llamarlas celdas.
Hay muchas más formas de pelar un gato.
fuente
Agregue el cuadrado a una matriz vacía.
Para cada cuadrado en la matriz:
Al final del proceso, tendrá una matriz de cuadrados de tamaño aleatorio. Tenga en cuenta que probablemente querrá definir un tamaño mínimo (en cuyo punto no se dividirá más) y un tamaño máximo (si el cuadrado es más grande, siempre divídalo independientemente del valor booleano).
fuente
Determine el tamaño y la geometría de la imagen. Si quiere que esto sea en mosaico, la geometría subyacente es la de un toro.
Mantenga una lista de la esquina superior izquierda de todas las formas posibles. Inicialmente, este es cada lugar posible.
Elija un rectángulo de tamaño aleatorio (dentro de las restricciones que haya decidido; en la imagen de ejemplo son cuadrados y tienen un tamaño máximo de 4). Coloque este rectángulo en un lugar aleatorio en la esquina superior izquierda.
Si el rectángulo es demasiado grande (se superpone a un punto asignado existente), recorte la dimensión del rectángulo para que encaje.
Elimine todas las ubicaciones cubiertas por este rectángulo de la lista de posibles esquinas superiores izquierdas.
Repita hasta que la lista de la esquina superior izquierda esté vacía.
Renderice la matriz resultante de la manera que prefiera. Aquí es donde introducirías un margen.
Si no está familiarizado con una biblioteca de gráficos en particular, considere usar el formato ppm . La ventaja clave es que puede escribir un archivo de texto y luego usar uno de los convertidores (ppmto___) para convertir la imagen al formato elegido (ppmtogif. Ppmtojpeg, ...)
fuente