Eu preciso de um método para dividir o espaço 3D em formas de caixas alinhadas com eixos aleatórios. Por enquanto, atualmente estou dividindo o espaço 2D para fins de teste. A abordagem mais imediata que surgiu foi definir um retângulo de tamanho (1, 1) e depois dividir recursivamente todos os retângulos existentes em dois retângulos desiguais alternando entre os eixos X e Y.
O problema aqui é óbvio. Essa abordagem resulta em longas linhas de alongamento (marcadas em vermelho)
O que eu gostaria é algo mais orgânico (incluí um exemplo)
Veja, não há longas linhas retas de cima para baixo ou da esquerda para a direita.
A única restrição é que talvez eu queira limitar o tamanho mínimo do retângulo sem afetar a granularidade dos tamanhos. ou seja, se o menor retângulo é de 1 centímetro quadrado do que o menor espaço de segundos não deve ter 2 unidades quadradas.
Idealmente, o algoritmo deve atender às três restrições a seguir:
- Retângulos não são infinitamente pequenos.
- Os tamanhos retos não são uma multiplicação discreta do menor tamanho ret. isto é, se o menor retângulo é de 3 unidades quadradas, as rects maiores não são restritas a 6, 9, 12 e outras unidades quadradas e, em vez disso, podem ser 3,2 ou 4,7).
- O algoritmo é executado em tempo polinomial (precisa calcular rapidamente).
Como você pode ver, consegui livrar o mundo desses artefatos. A ideia é muito parecida.
Grade não uniforme (1):
Negociação no eixo x (2):
Negociação no eixo y (3):
Resultado (4):
fonte