Necesito un método para dividir el espacio 3d en formas de caja alineadas con ejes aleatorios. Por ahora estoy dividiendo el espacio 2d para fines de prueba. El enfoque más inmediato que se me ocurrió fue definir un rectángulo de tamaño (1, 1) y luego dividir recursivamente todos los rectángulos existentes en dos rectángulos irregulares que alternan entre los ejes X e Y.
El problema aquí es obvio. Este enfoque da como resultado largas líneas de estiramiento (marcadas en rojo)
Lo que me gustaría es algo más orgánico (incluí un ejemplo)
Mira, no hay líneas rectas largas de arriba a abajo o de izquierda a derecha.
La única restricción es que me gustaría limitar el tamaño mínimo del rectángulo sin afectar la granularidad de los tamaños. es decir, si el rectángulo más pequeño es 1 centímetro cuadrado que el segundo, la habitación más pequeña no debe tener 2 unidades cuadradas.
Entonces, idealmente, el algoritmo debe cumplir con las tres restricciones siguientes:
- Los rectángulos no son infinitesimalmente pequeños.
- Los tamaños de rect no son una multiplicación discreta del tamaño rect más pequeño. es decir, si el rect más pequeño es de 3 unidades cuadradas, los rectos más grandes no están limitados a ser 6, 9, 12, etc.
- El algoritmo se ejecuta en tiempo polinomial (necesita calcular rápido).
Como puede ver, logré librar al mundo de estos artefactos. La idea es muy parecida.
Rejilla no uniforme (1):
Negociando sobre el eje x (2):
Negociando sobre el eje y (3):
Resultado (4):
fuente