At My Fingertips
In questa attività implementeremo la funzione spirale_fibonacci
per generare una spirale che rappresenti i primi n numeri della successione di Fibonacci (una successione di numeri interi in cui ciascun numero è la somma dei due precedenti), come nella grafica seguente.
La spirale di Fibonacci è cmposta di tessere quadrate con un settore circolare che va da un angolo all'altro, ruotato e di dimensioni crescenti.
Per prima cosa dovremo implementare la funzione tessera
, che ritorna un quadrato del colore
e delle dimensioni
scelte, con settore circolare nero di 90 gradi (il cui raggio è uguale al lato del quadrato), e un settore circolare più piccolo dello stesso colore del quadrato per coprire una parte di settore circolare nero, creando l'iilusione di una linea nera. La differenza tra il settore circolare nero e il settore circolare che lo ricopre dovrebbe corrispondere a un determinato spessore_linea
.
Per raggiungere l'effetto desiderato dovrai usare le funzioni fissa e componi per fissare tutto nell'angolo in basso a sinistra.
Ogni tessera dovrebbe essere ruotata di 90 gradi rispetto alla precedente. Questo significa che la prima tessera dovrebbe restare uguale, la seconda dovrebbe essere ruotata di 90 gradi, la terza dovrebbe essere ruotata di 180 gradi e la quarta di 270 gradi. La quinta, poi, dovrebbe nuovamente restare uguale: il giro ricomincia.
Implementiamo una funzione orienta
che riceve a parametro una tessera e la restituisce ruotata in base al parametro n
. Se n
== 0, allora la tessera non dovrebbe essere ruotata, se n
== 1 dovrebbe essere ruotata di 90 gradi e così via.
Usa la funzione modulo %
.
Ora siamo pronti per implementare la funzione spirale_fibonacci
. Questa funzione prende il numero di tessere della tua spirale finale come parametro n
. La spirale diventa molto grande molto rapidamente, quindi sentiti libero di adattare la costante DIMENSIONI_MIN
fornita quando utilizzi un valore di n
più grande.
La costante DIMENSIONI_MIN
determina le dimensioni delle due tessere più piccole (le prime due tessere dovrebbero avere le stesse dimensioni, dato che la successione di Fibonacci comincia con 1, 1, 2, 3, 5, ...).
The MIN_SIZE
is the size that the smallest two tiles should have (the first two tiles should have the same size, since fibonacci's sequence goes 1, 1, 2, 3, 5, ...).
A seconda di come hai implementato la funzione orienta
, le prime due tessere dovrebbero essere piazzate una sopra l'altra o una accanto all'altra, in modo che le linee nere risultino allineate.
Successivamente, la terza tessera dovrebbe essere larga o alta tanto quanto le prime due tessere insieme (in modo che le linee nere risultino allineate). Puoi usare a tale scopo le funzioni di PyTamaro larghezza_grafica e altezza_grafica.
Anche la costante SPESSORE
dovrebbe essere adattata in base a n
, dato che il risultato finale può diventare molto grande.
Ci sono diversi modi per ottenere il risultato desiderato, ma noi noi ti guideremo attraverso l'implementazione della funzione spirale_fibonacci
come una funzione ricorsiva.
Una funzione ricorsiva in Python è una funzione che si chiama da sola durante la sua esecuzione. Questo significa che all’interno della funzione c’è un punto in cui la funzione stessa viene richiamata, in modo da risolvere un problema suddividendolo in versioni più piccole e più semplici dello stesso problema.
L’idea principale è che un problema grande può essere spezzato in problemi più piccoli, fino a quando si arriva a un caso così semplice che si può risolvere direttamente.
I due elementi fondamentali di una funzione ricorsiva sono il caso base e il passo ricorsivo.
In altre parole, il caso base è la condizione che evita che la funzione ricorsiva continui a richiamarsi all’infinito. Ogni funzione ricorsiva deve avere almeno un caso base, altrimenti non si fermerebbe mai.
Nella nostra funzione:
n
e combinarla con il risultato di una chiamata della funzione spirale_fibonacci
stessa in cui al parametro n
sarà attribuito valore n - 1In questo modo, il caso base spirale_fibonacci(n=0)
concluderà l'esecuzione per primo, poi spirale_fibonacci(n=1)
genererà una nuova tessera e la combinerà con la prima, poi spirale_fibonacci(n=2)
genererà una nuova tessera e la combinerà con il risultato di spirale_fibonacci(n=1)
. Il tutto continuerà fino a quando spirale_fibonacci(n=n)
restituirà il risultato finale.
This activity has been created by Lardelli and is licensed under CC BY-SA 4.0.
It is derived from this activity.
Fibonacci
PyTamaro is a project created by the Lugano Computing Education Research Lab at the Software Institute of USI
Privacy Policy • Platform Version b744b47 (Tue, 08 Oct 2024 16:30:14 GMT)