Quero criar um layout bidimensional de formas retangulares, uma grade composta de cubos de tamanho aleatório. O cubo deve se encaixar e ter preenchimento ou margem iguais (espaço entre eles). Como um layout de quadrinhos ou mais como a imagem anexada.
Como eu poderia fazer isso proceduralmente?
Na prática, eu provavelmente usaria Python e algum software gráfico para renderizar uma imagem, mas não sei o tipo de algoritmo (ou outros enfeites) que precisaria usar para gerar a grade aleatória.
programming-practices
python
math
Mrwolfy
fonte
fonte
Respostas:
Comece com uma grade de células 1x1. Escolha um ponto aleatório, mescle as células uma quantidade aleatória ou até que colide com um retângulo maior.
Isso fornecerá algo semelhante à imagem que você fornece.
Há um problema maior se você não quiser um número de células menores atuando como preenchimento entre suas células maiores. Uma história em quadrinhos, por exemplo, quer minimizar a quantidade de espaço morto e ter no máximo ~ 9 células. Você pode escolher alguns pontos, desenhar algumas linhas e chamá-las de células.
Há muito mais maneiras de esfolar um gato.
fonte
Adicione o quadrado a uma matriz vazia.
Para cada quadrado na matriz:
No final do processo, você terá uma matriz de quadrados de tamanho aleatório. Observe que você provavelmente desejará definir um tamanho mínimo (quando não for mais dividida) e um tamanho máximo (se o quadrado for maior, sempre separe independentemente do valor booleano).
fonte
Determine o tamanho e a geometria da imagem. Se você deseja que isso seja lado a lado, a geometria subjacente é a de um toro.
Mantenha uma lista do canto superior esquerdo de todas as formas possíveis. Inicialmente, este é todo ponto possível.
Escolha um retângulo de tamanho aleatório (dentro das restrições que você decidiu - na imagem de exemplo, eles são quadrados e têm um tamanho máximo de 4). Coloque esse retângulo em um local aleatório no canto superior esquerdo.
Se o retângulo for muito grande (sobrepõe um ponto alocado existente), apare a dimensão do retângulo para que ele se ajuste.
Remova todos os locais cobertos por esse retângulo da lista de possíveis cantos superiores esquerdo.
Repita até que a lista do canto superior esquerdo esteja vazia.
Renderize a matriz resultante da sua maneira preferida. É aqui que você introduziria uma margem.
Se você não estiver familiarizado com uma biblioteca de gráficos específica, considere usar o formato ppm . A principal vantagem é que você pode gravar um arquivo de texto e usar um dos conversores (ppmto___) para converter a imagem no formato escolhido (ppmtogif. Ppmtojpeg, ...)
fonte