Ho bisogno di un metodo per dividere lo spazio 3d in forme casuali allineate ad asse. Per ora sto attualmente dividendo lo spazio 2d a scopo di test. L'approccio più immediato che mi è venuto in mente è stato quello di definire un rettangolo di dimensioni (1, 1) e quindi dividere in modo ricorsivo tutti i rettangoli esistenti in due rettangoli irregolari alternati tra l'asse X e Y.
Il problema qui è ovvio. Questo approccio si traduce in lunghe linee di allungamento (contrassegnate in rosso)
Quello che vorrei è qualcosa di più organico (ho incluso un esempio)
Vedi, nessuna lunga linea retta dall'alto verso il basso o da sinistra a destra.
L'unico vincolo è che potrei voler limitare la dimensione minima del rettangolo senza influire sulla granularità delle dimensioni. cioè se il rettangolo più piccolo è di 1 centimetro quadrato rispetto al secondo spazio più piccolo non dovrebbe essere di 2 unità quadrate.
Quindi idealmente l'algoritmo dovrebbe soddisfare tutti e tre i seguenti vincoli:
- I rettangoli non sono infinitamente piccoli.
- Le dimensioni rettali non sono una moltiplicazione discreta della dimensione rettale più piccola. vale a dire se il retto più piccolo è di 3 unità quadrate rispetto ai rect più grandi non sono vincolati a essere 6, 9, 12 e così via unità quadrate e invece potrebbero essere 3.2 o 4.7 per quella materia).
- L'algoritmo viene eseguito in un tempo polinomiale (deve essere calcolato rapidamente).