At My Fingertips

Stella

Descrizione

In questa attività implementeremo una funzione chiamata stella che ci permetterà di creare stelle con un numero n di punte per n maggiore di 2: questo significa che potremo ottenere stelle a tre, quattro, cinque punte e così via.

different pointed stars

La funzione stella prenderà inoltre come parametro le dimensioni e l'angolo di ciascun vertice. Nella nostra implementazione se l'angolo è troppo ottuso i risultati non sono accettabili, per cui imposteremo un angolo_massimo di 360/n, dove n rappresenta il numero di vertici di ogni stella.

Esempio: per le stelle a cinque punte, l'angolo massimo equivale a 360°/5 = 72°. Nell'immagine seguente puoi vedere una stella a cinque punte con vertici di 30°, una con vertici di 50° e una con vertici di 72°.

five pointed stars

Ricordati di asserire (assert) che l' angolo dato sia inferiore o uguale a 360/n!

Analisi del problema

Come mostrato nell'immagine sottostante, notiamo che le stelle possono essere composte creando n triangoli isosceli, progressivamente ruotati secondo un angolo_di_rotazione di 180 - (180 * n - 360) / n gradi, e fissandoli tutti in basso al centro.

triangle approach

Il triangolo isoscele verticale

Cominciamo creando una funzione triangolo_isoscele che ritorna un triangolo isoscele ruotato verticalmente. Ricordati che chiamare triangolo(160, 160, 40, COLORE_STELLA genera il triangolo seguente.

isosceles triangle not rotated

Per farlo stare in piedi diritto occorre ruotarlo dell'angolo rappresentato di seguito:

isosceles triangle rotation

Per farlo stare in piedi diritto occorre ruotarlo dell'angolo rappresentato di seguito:

Attenzione Queste immagini sono soltanto indicative: servono ad aiutarti nel ragionamento, ma non rappresentano quello che dovrà necessariamente essere il risultato finale. L'angolo di rotazione non deve essere un valore fisso, ma deve essere calcolato in modo da funzionare con qualsiasi tipo di triangolo isoscele. Cerca di elaborare una formula per calcolare l'angolo di rotazione (indicato in grigio nella seconda immagine), in funzione dell'angolo tra i due lati uguali del triangolo (in basso a sinistra nella seconda immagine), il cui valore è indicato dal parametro angolo. Per facilitarti il compito puoi anche suddividere il calcolo in diversi passaggi.

Suggerimenti:

  • la funzione ruota di PyTamaro ruota una grafica in senso anti-orario secondo l'angolo indicato. Per ruotare in senso orario occorre dare un angolo negativo!
  • se hai svolto l'attività PyTamaro iconRombo hai già risolto questo problema: puoi salvare la funzione triangolo_isoscele nella tua toolbox cliccando sull'icona

SaveToToolboxButtonSurrounded.png

sulla cella che contiene la definizione della funzione.

Dopo aver fatto questo lavoro, importa la funzione triangolo_isoscele dalla tua toolbox eseguendo la prossima casella di codice.

Loading...

La stella

Ora puoi implementare la funzione stella. Usa il COLORE_STELLA indicato per ottenere lo stesso colore che abbiamo usato noi e i parametri seguenti:

  • n: il numero dei vertici della stella: asserisci che siano almeno tre;

Nota bene: utilizzando la parola chiave assert puoi fare in modo che il programma controlli di avere ricevuto parametri validi, restituendo un messaggio di errore nel caso contrario. Nel nostro caso, per accertare che la stella abbia almeno tre vertici puoi digitare l'istruzione assert n > 2.

  • dimensioni: approssimativamente le dimensioni di ogni vertice; asserisci che si tratti di un numero positivo;
  • angolo: è l'angolo di ciascuno dei vertici; asserisci che sia maggiore di 0 e minore di 360/n.

Ricorda che ogni vertice è ruotato rispetto al precedente secondo un angolo_di_rotazione pari a 180 - (180*n - 360)/n.

Loading...

This activity has been created by Lardelli and is licensed under CC BY-SA 4.0.

It is derived from this activity.

Stella

Logo of PyTamaro

PyTamaro is a project created by the Lugano Computing Education Research Lab at the Software Institute of USI

Privacy PolicyPlatform Version b744b47 (Tue, 08 Oct 2024 16:30:14 GMT)