Cerca

modulo attività

modulo tecnica

In questo articolo si illustrano i risultati di ulteriori esperimenti eseguiti con Scratch per sondarne alcune caratteristiche di velocità.

Viene provocata una rotazione di 7 gradi più volte e si cerca di misurare il tempo impiegato a compiere tutte le rotazioni richieste (nota 1) utilizzando sript differenti.

La rotazione multipla può essere effettuata vantaggiosamente utilizzando i cicli di ripetizione ma si va a scoprire che i comandi di controllo del flusso delle istruzioni hanno una notevole incidenza sui tempi di calcolo.

Per lo scopo è stato scritto un progetto specifico reperibile a questo link1 a cui conviene andare per vedere come sono stati scritti tutti gli script per realizzare l'esperimento.

Sullo stage vengono disposti cinque sprite che compiono delle rotazioni sulla base dei rispettivi script.

Premendo i tasti numerici si avviano processi diversi e si misurano i tempi impegati per completare i comandi utilizzando il cronometro interno di Scratch.

 

Dopo aver premuto [bandierina verde] si ottiene uno stage pulito.

Di seguito si esaminano i risultati dei singoli esperimenti.

 

I seguenti esperimenti vengono svolti utilizzando la modalità "editor" e senza il "turbo".

[tasto 1]

Lo sprite deve compiere 500 rotazioni di 7 °. 

Il compito viene realizzato scrivendo 500 volte di seguito il singolo comando "ruota di 7°" suddiviso in 10 blocchi da 50 comandi

In questo modo non si richiamano comandi controllo del flusso.

Non si osserva alcuna rotazione mentre lo sprite scatta nella posizione finale di -100°.

Il tempo misurato è 0,00 s che significa solo che non è misurabile con i mezzi he offre Scatch stesso.

Il calcolo è comunque rapidissimo ma non si osserva movimento.

La rotazione corrisponde al calcolo resto di (500*7/360) = 260 = -100.

 

[tasto 2]

Si utilizza 10 volte consecutivamente il ciclo "ripeti 10 volte per fare compiere in tutto 100 rotazioni di 7°.

Il tempo impiegato è 3,33s, si vede lo sprite ruotare e la posizione finale è -20°.

La posizione finale corrisponde al calcolo resto di (100*7/360) = 340 = -20

Si può calcolare che per ogni rotazione di 7° Scratch abbia impiegato 3,33/100 =  0,0333s.

O, in altri termini, Scratch ha fatto compiere 30 rotazioni in un secondo.

Questo è un risultato già emerso nell'esperimento link1.

SI conferma che la presenza del ciclo di ripetizione impone il ridisegno del quadro al ritmo previsto di 30 frame al secondo.

 

[tasto 3]

Con un comando "ripeti 10 volte" si produce una sequenza di 50 rotazioni.

Il tempo impiegato è di 0,333 s, la rotazione che si osserva è retrograda e la posizione finale è -100°.

Il tempo impiegato corrisponde al fatto che sono stati eseguiti 10 cicli di durata identica a quella misurata nel caso precedente.

Il moto retrogrado è spiegabile col fatto che al termine di ogni ciclo, lo sprite ha ruotata di 50*7° = 350°

Dato che il ridisegno del quadro avviene al termine di ogni ciclo accade che dopo ciascun ciclo si trova 10 gradi indietro.

È l'effetto stroboscopico.

 

[tasto 4] 

Si provoca la stessa rotazione  del caso [tasto 2] ma con un solo ciclo di 100 ripetizioni.

Il risultato è identico: durata 3,33 s. 

È interessante vedere cosa accade se non si mostra lo sprite.

Per questo caso si preme [tasto 7] e si vede che il tempo diventa molto minore: 0,032 s.

Se si mostra lo sprite solo dopo che c'è stata la rotazione si vede che occupa la posizione prevista.

Il ridisegno del quadro richiede tempo. Se non si deve mostrare lo sprite in rotazione, Scratch non provvede a ridisegnare il quadro e svolge i calcoli più velocemente.

 

[tasto 5]

Si comanda 50 volte la rotazione di 7° con una sequenza come fatto nel caso di [tasto 1] ma questa volta si impone ad ogni rotazione un calcolo che sembra gravoso essendoci diverse funzioni trascendentali.

Non si vede la rotazione, la posizione finale è -20° come atteso ma la durata non è misurabile.

Se si aggiunge al gruppo dei calcoli un comando "attendi 0 s" si vede la rotazione e la durata diventa di 3,33 s.

 

[tasto 6]

Utilizzando la stessa impοstazione del ψaso di [tasto 1] con solo 30 rotazioni di 7° ma con un comando "attendi 0 s" si vede lo sprite ruotare ed il tempo impiegato è 1 s.

Anche la funzione di ritardo, seppur di 0 s, produce la forzatura del ridisegno del quadro con la conseguente animazione visibile.

 

Tutte le prove si possono ripetere con la modalità "turbo".

Tranne il caso [tasto 6] tutti gli sprite ruotano istantaneamente alla posizione finale e la durata non è misurabile.

Può significare che in modalità turbo i cicli non provocano il ridisegno del quadro con la conseguente perdita di tempo.

Il caso [tasto 6]  mostra ancora la rotazione e la durata resta la stessa di quasi un secondo.

Il comando di attesa viene comunque rispettato anche in modalità turbo a differenza degli altri comandi della stessa categoria (nota 2).

Lo stesso accade con [tasto 5] se si aggiunge il comando di "attendi 0 s" al gruppo dei calcoli.

 

Se si lavora in modalità player si osservano notevoli rallentamenti dovuti al fatto che in offline il computer deve ridimensionare tutti i disegni per adattarli alla definizione dello schermo in uso.

Questo ritardo non si presenta nella versione on line ... probabilmente il computer di Scratch è molto potente.

 

Note

nota 1: ho scelto una rotazione di 7 gradi solo perchè è primo rispetto a 360.

nota 2: in realtà si dovrebbe indagare per tutti i comandi.