Salve a tutti,

sto cercando di implementare l'algoritmo di Shneidermann per le treemaps.
In sintesi vengono dati in input l'area di un rettangolo e una lista di elementi L1,L2...Ln ognuno dei quali che abbia un valore numerico (che rappresenta anch'esso un'area); la somma di tutti questi valori è uguale all'area del rettangolo.
L'algoritmo consiste nel scegliere ogni volta l'elemento di area maggiore, disegnarlo all'interno del rettangolo facendolo sembrare il più possibile simile ad un quadrato, poi dividere l'area restante del rettangolo di partenza in 3 rettangoli, come in questa figura:

dove Rp è l'elemento con area maggiore, R1 è formato dagli elementi con indice (di lista) precedente a Rp, e R2 e R3 contengono gli elementi restanti, divisi in modo tale da far diventare Rp il più possibile simile ad un quadrato (aspect ratio più vicino a 1).
Dopodichè si applica l'algoritmo ricorsivamente a R1,R2 e R3 fino ad aver piazzato tutti gli elementi.

L'algoritmo mi è chiaro e l'ho implementato correttamente, solo che ho un grosso problema.
Ho utilizzato le awt per creare il pannello e disegnarci i rettangoli e mi si è presentato questo problema:
come faccio a far sì che i lati dei rettangoli abbiano valori interi?
Chiedo questo perchè avendo l'area del rettangolo di partenza fissa, devo collocare i vari rettangoli al loro interno senza sprecare neanche un pixel, ma nei vari calcoli mi trovo spesso a dover dividere l'area di un rettangolino per un lato per ottenere l'altro lato, ma così facendo ovviamente il lato può essere non intero o addirittura periodico, e in questo caso le awt quando disegnano i rettangoli, arrotondano i numeri con la virgola, ma così facendo i rettangoli non entrano più perfettamente e applicando tutto questo ricorsivamente l'errore cresce sempre più...

Come faccio ad evitare ciò?

Se non mi sono spiegato bene ditelo che cerco di chiarire meglio!
Grazie per l'attenzione