# Orologio analogico

Costruire un orologio analogico le cui lancette si muovano segnando l'ora corretta.

## Versione di Scratch utilizzata

La versione di scratch usata in questo progetto è scratch 3.0 online.

## Cosa richiede l'esercizio e come si fa

Trovare e mostrare sullo stage l'ora corretta in ore, minuti e secondi. Disegnare o inserire il quadrante di un orologio. Inserire o disegnare le lancette in modo che ruotino sull'estremità posizionata al centro del quadrante segnando l'ora corretta.

## Qualche calcolo
### Lancetta delle ore

Il quadrante dell'orologio si divide in 12 ore l'angolo compreso tra due ore successive è di ${\frac {360^{\circ }}{12}}=30^{\circ }$.
La corrispondenza tra ora e angolo è dunque:
Didascalia :
| Cella di intestazione | Cella di intestazione |
| 1 | 10° |
| 2 | 60° |
| 3 | 90° |
| 4 | 120° |
| 5 | 150° |
| 6 | 180° |
| 7 | 210° |
| 8 | 240° |
| 9 | 270° |
| 10 | 300° |
| 11 | 330° |
| 12 | 0° |
La lancetta delle ore segna l'ora corretta in base all'angolo che forma con la direzione verticale in cui sono posizionate le ore 12. In scratch le direzioni sono:
Scratch fornisce una funzione per avere data, ora, minuti e secondi correnti.
La prima ora, all'una, la lancetta delle ore dovrà puntare in direzione 30° rispetto alla verticale. Per tutte le ore la direzione in cui deve puntare la lancetta sarà data dal calcolo
che quindi nel caso della prima ora sarà
Come si può notare nella tabella sopra alle ore 12 corrisponde l'angolo 0°, probabilmente per scratch $0^{\circ }\equiv 360^{\circ }$ ma è possibile evitare che gli angoli della lancetta delle ore aumentino infinitamente utilizzando la divisione in modulo.
La divisione in modulo, abbreviata mod, è una operazione che partendo da una divisione restituisce come risultato il resto. Così è possibile ottenere per tutte e 24 le ore solo risultati tra 0 e 12, infatti
e poi ricomincia
$13{\bmod {12}}=1,14{\bmod {12}}=2$
e così via fino a
$23{\bmod {12}}=11$ e $24{\bmod {12}}=0$
E così nel codice che fa muovere la lancetta delle ore al numeratore della frazione ci sarà sempre un numero tra 0 e 12.

## Costumi e codice

Per ottenere una lancetta rotante è importante che il centro dello sprite sia posizionato nell'estremo della lancetta che vogliamo resti fermo al centro del quadrante dell'orologio. Così ad esempio per la bacchetta da prestigiatore andiamo nella scheda in cui è possibile modificare il costume e selezionandolo per intero lo spostiamo in modo che il centro dello sprite coincida con un estremo della bacchetta.
Nella figura qui sopra il centro dello sprite è nell'estremo a sinistra della bacchetta. Gli sprite necessari per questo progetto.

### Quadrante orologio

Il quadrante dell'orologio lo si può ottenere scaricando un file dalla rete che abbia una licenza creative commons. E lo si può caricare come disegno su scratch. Volendo lo si può anche disegnare sia come sprite sia come sfondo.

### Lancetta delle ore

Per la lancetta delle ore nel progetto di esempio è stata scelta la bacchetta del mago, e il codice è questo, come abbiamo già visto anche sopra.
Con questo codice si ottiene però una lancetta delle ore che scatta solo una volta all'ora solo ad ora compiuta. Negli orologi veri il movimento della lancetta delle ore però è più continuo, e si posiziona anche tra le ore.
Un movimento più continuo, che si avvicini all'ora corretta nella mezz'ora precedente e se ne allontani in quella successiva lo si ottiene con questo codice.
Il quadrante è stato diviso in minuti
che è il totale dei minuti che la lancetta delle ore conteggia facendo un giro completo di quadrante. A questo punto la posizione delle lancetta delle ore si ottiene facendo
${\frac {\left(ora{\bmod {12}}\right)\cdot 60+minuti}{12\cdot 60}}\cdot 360^{\circ }=angolo$
in questo modo si calcola l'angolo che la lancetta delle ore forma con la verticale.

### Lancetta dei minuti

Il codice della lancetta dei minuti deve tenere conto che sono 60 i minuti sul quadrante, e sono dunque 60 i diversi angoli che la lancetta deve comporre. A differenza della lancetta delle ore però la lancetta dei minuti si azzera ad ogni passaggio sulla verticale, ogni volta che trascorre un minuto.
E' per questo abbastanza semplice ricavare l'angolo che la lancetta deve indicare sul quadrante
Che corrisponde al codice scratch:

### Lancetta dei secondi

Dopo la descrizione della lancetta minuti non è difficile comprendere come deve funzionare la lancetta dei secondi che dovrà seguire la formula: