Qui è il mio problema:riempiendo lo spazio con cerchi di dimensioni diverse
- Ho un sacco di cerchi che ho bisogno di visualizzare all'interno di una tela.
- C'è un numero arbitrario di cerchi, ognuno con un raggio predefinito.
- L'area sommata dei cerchi è sempre più piccola dell'area della tela.
Voglio posizionare i cerchi in modo che occupino lo spazio massimo disponibile all'interno della tela, senza toccarsi. Il mio obiettivo è ottenere un effetto visivamente piacevole in cui i cerchi appaiono ben distribuiti all'interno della tela. Non so se questo è davvero "spazio di riempimento", in quanto il mio obiettivo non è quello di ridurre al minimo la distanza tra gli elementi, ma piuttosto a massimizzare it.
Ecco un esempio di quello che sto cercando di realizzare:
La mia prima idea "forza bruta" è stato il seguente:
- Per ogni cerchio: calcolare la distanza più breve tra il suo confine e il bordo di ogni cerchio; somma tutte queste distanze, chiama X.
- Calcola la somma di tutte le X.
- Cambia casualmente le distanze tra i cerchi.
- Rifare 1-3 per un numero preimpostato di iterazioni e ottenere il valore massimo ottenuto al passaggio (2).
Tuttavia, questo non sembra elegante; Sono sicuro che c'è un modo migliore per farlo. Esiste un algoritmo esistente per ottenere tale layout? C'è qualche libreria esistente che potrei usare (JavaScript o Ruby) per raggiungere questo obiettivo?
Modifica
Ecco un Javascript version della risposta accettata, che utilizza Raffaello per disegnare i cerchi.
Non cerchi, ma http://www.openprocessing.org/sketch/1811 – biziclop
louism, dai un'occhiata alla risposta di Kris! Le immagini sono fantastiche - penso che dovresti accettarlo. @KrisVanBael, che ne dici di postare il codice su GitHub? –