Le catene di Steiner sono un insieme di N cerchi in cui ogni cerchio è tangente ad altri 2 cerchi non intersecanti nonché ai cerchi precedenti e successivi della catena, come mostrato nelle immagini seguenti:
In questa sfida, scriverai un programma / funzione che disegna ricorsivamente catene di Steiner, ovvero i cerchi di una data catena saranno i cerchi di base di un'altra iterazione di catene:
Sfida
Scrivi un programma / funzione che accetta le dimensioni dell'immagine e un elenco di numeri interi che denoti il livello dei cerchi in ogni successiva iterazione di catene e genera un'immagine con le catene ricorsive di Steiner disegnate su di essa.
Ingresso
Il tuo programma / funzione accetterà 2 argomenti:
s
- larghezza e altezza dell'immaginels
- elenco di numeri interi positivi che indicano il numero di cerchi presenti in ogni iterazione successiva di catene, ordinate dalla catena più in alto alla catena più in basso
Produzione
Il tuo programma / funzione produrrà un'immagine della dimensione s
x che s
mostra la catena di Steiner recusiva.
- Il cerchio di base di livello superiore sarà grande come l'immagine con un diametro di
s
, centrato all'interno dell'immagine - Per semplificare le cose, i 2 cerchi di base di una catena di Steiner saranno concentrici, ovvero i punti centrali dei 2 cerchi di base saranno gli stessi
- Dato un raggio esterno
R
e il numero di cerchi in una catenaN
, la formula per il raggio internoR'
èR' = (R-R*sin(pi/N))/(sin(pi/N)+1)
- I cerchi della catena e il cerchio della base interna saranno i cerchi della base esterna della successiva iterazione di catene
- Mentre ricorre attraverso i cerchi della catena, l'ordine della catena successiva dovrebbe corrispondere al valore successivo in
ls
- Mentre ricorre attraverso il cerchio interno di una catena, l'ordine dovrebbe essere uguale all'ordine dei suoi genitori (esempio [5,2]):
- Tutte le catene dovrebbero terminare la ricorsione a una profondità della lunghezza di
ls
- La rotazione delle catene non ha importanza:
- Tuttavia, le rotazioni delle catene ricorsive relative al punto centrale dei genitori dovrebbero essere le stesse:
- Tutti i cerchi devono essere disegnati con un contorno o un riempimento solido
- La scelta del colore è lasciata all'implementazione, tranne per le lacune (ad esempio, riempiendo tutto con lo stesso colore)
Esecuzioni di esempio
Negli esempi seguenti, il colore è determinato da (depth of the recursion)^4
.
Puoi trovare la fonte qui .
chain(600,[5,4,3])
chain(600,[11,1,1,1,1,1,1])
chain(600,[5,6,7,8,9])