[BASE Cinque - Appunti di Matematica ricreativa]

Turtle graphics #1. Dal triangolo equilatero ai poligoni regolari

Come usare le variabili e i cicli per creare un programma flessibile.

 

Sintesi. Un percorso pratico per capire come generalizzare il disegno dei poligoni regolari con la turtle graphics. Partendo dal triangolo equilatero, introduciamo i cicli e le variabili per guidare la tartaruga a disegnare autonomamente un qualsiasi poligono regolare fino a sfiorare la circonferenza.

Disegnare un triangolo equilatero

Per iniziare, facciamo disegnare alla nostra tartaruga un triangolo equilatero. Scriviamo le seguenti istruzioni nell'editor di LibreLogo.

forward 200
right 120
forward 200
right 120
forward 200
right 120 

Turtle graphics Triangolo

Figura. Triangolo equilatero ottenuto con la turtle graphics

 

Nota didattica.

L’angolo di rotazione indica di quanti gradi la tartaruga cambia direzione tra un segmento e il successivo della linea spezzata che sta disegnando.

Nel caso di un poligono, l’angolo di rotazione corrisponde all'angolo esterno del poligono, non a quello interno!

Per un triangolo equilatero:

Usare le istruzioni abbreviate

Per scrivere più velocemente un programma possiamo usare le istruzioni abbreviate.

fd 200
rt 120
fd 200
rt 120
fd 200
rt 120 

Usare una variabile

Se vogliamo disegnare un triangolo equilatero più grande o più piccolo, dobbiamo modificare manualmente le misure di tutti e tre i lati. Per evitare questo lavoro ripetitivo, conviene usare una variabile e assegnarle il valore desiderato.

Per creare una variabile e assegnarle un valore usiamo la sintassi:

lato = 38 

In questo caso, lato è il nome della variabile e 38 è il suo valore, espresso con un numero intero o decimale. La misura degli angoli di rotazione, invece, rimane costante a 120°.

Scriviamo lo stesso programma sfruttando la nostra variabile:

lato = 38
fd lato
rt 120
fd lato
rt 120
fd lato
rt 120 

Turtle graphics triangolo

Figura. Triangoli equilateri di misure diverse ottenuti con la turtle graphics

 

Usare un ciclo

Osserviamo che per disegnare il triangolo dobbiamo ripetere per 3 volte consecutive la coppia di istruzioni:

fd lato
rt 120 

In programmazione si usa un ciclo, che in LibreLogo si esprime con questa sintassi:

lato = 150
repeat 3 [
  fd lato
  rt 120
] 

L'indentazione

Le parentesi quadrate [ ] aprono e chiudono il blocco di istruzioni che costituisce il ciclo.
Per rendere visivamente più chiara la struttura del programma, spostiamo le linee di codice interne al ciclo di qualche spazio verso destra. Questo rientro si chiama indentazione ed è una buona pratica per scrivere codice ordinato e facile da leggere!

L’indentazione aiuta a visualizzare meglio la gerarchia delle istruzioni, soprattutto quando si lavora con cicli annidati o sequenze più complesse.

Aspetti tecnici importanti.

Disegnare un quadrato

Riprendiamo la procedura che disegna un triangolo equilatero e apportiamo due piccole modifiche: il ciclo si ripete 4 volte e l'angolo di rotazione diventa 90°.

In questo modo otteniamo un quadrato.

l=200
repeat 4 [
  forward l
  right 90
]

Turtle graphics quadrato

Figura. Quadrato ottenuto con la turtle graphics

 

Disegnare un pentagono e un esagono regolari

Pentagono regolare: l'angolo di rotazione (come abbiamo già visto, è l'angolo esterno del pentagono) misura:

360/5 = 72°

Usiamo una nuova variabile, a, che esprime l'angolo di rotazione e le assegniamo un valore  tramite un calcolo.

l=150
a=360/5
repeat 5 [
  forward l
  right a
]

Turtle graphics pentagono

Figura. Pentagono regolare ottenuto con la turtle graphics

 

Esagono regolare: l'angolo di rotazione (angolo esterno dell'esagono) misura:

360/6 = 60°

Facciamo un passo avanti e introduciamo un'altra variabile, nl, che esprime il numero dei lati del poligono.

Inoltre, calcoliamo il valore dell'angolo a tramite una formula che usa a sua volta la variabile nl. In questo modo, se cambia il numero dei lati, l'angolo si adegua automaticamente.

l=150
nl=6
a=360/nl
repeat nl [
  forward l
  right a
]

Turtle graphics esagono

Figura. Esagono regolare ottenuto con la turtle graphics

 

Quasi tutto è variabile: disegnare un poligono regolare di n lati

A questo punto si capisce che possiamo usare questa procedura generale per disegnare un qualunque poligono regolare di n lati semplicemente cambiando alcuni valori.

Osserviamo che:

Informaticamente, diciamo che questa procedura ha solo due parametri indipendenti: la lunghezza del lato (l) e il numero dei lati (nl).

L'ampiezza dell'angolo di rotazione (a) è invece una variabile dipendente, perché il computer la calcola in base a quanti lati abbiamo scelto.

Proviamo per esempio a disegnare un poligono regolare con 19 lati:

l=10
nl=19
a=360/nl
repeat nl [
  forward l
  right a
]

Turtle graphics 19-agono

Figura. Poligono regolare di 19 lati ottenuto con la turtle graphics


Disegnare una circonferenza?

Con le istruzioni che abbiamo visto finora, è possibile disegnare una circonferenza?

Risposta: una quasi-circonferenza.

La turtle, con l'istruzione forward n, può tracciare solo segmenti, quindi non può disegnare una circonferenza.

Ma possiamo farle disegnare un poligono regolare con tantissimi lati molto corti. Il risultato è arbitrariamente vicino a una circonferenza.

Ecco un esempio di poligono con 360 lati lunghi 2.

l=2
nl=360
a=360/nl
repeat nl [
  forward l
  right a
]

Turtle graphics quasi cerchio

Figura. Poligono di 360 lati, una quasi-circonferenza, ottenuto con la turtle graphics

 

L'esecuzione di questo programma è lenta. Per fortuna LibreLogo ha un comando diretto che permette di disegnare una circonferenza velocemente:

circle n

circle 120 ; disegna una circonferenza (o un cerchio colorato) di diametro 120 con il centro nella posizione della turtle

Per esempio, disegniamo un quadrato con un cerchio a ogni vertice.

l=120
nl=4
a=360/nl
repeat nl [
  forward l
  circle 120
  right a
]

Turtle graphics quattro cerchi

Figura. Cerchi ottenuti con l'istruzione circle

 

Istruzioni di base per disegnare con la turtle graphics

Note didattiche.

Movimento della tartaruga

forward n (fd n)

forward 10 ; muove avanti di 10pt

 

back n (bk n)

back 10 ; muove indietro di 10pt

 

left n (lt n)

left 90 ; ruota la tartaruga di 90 gradi in senso antiorario

 

right n (rt n)

right 90 ; ruota la tartaruga di 90 gradi in senso orario

Stato della penna

penup (pu) ; penna su, la tartaruga si sposterà senza disegnare

 

pendown (pd) ; penna giù, la tartaruga si sposterà disegnando

Altre istruzioni della tartaruga

hideturtle (ht) ; nasconde la tartaruga (fino al comando showturtle)

 

showturtle (st) ; mostra la tartaruga

 

home ; muove la tartaruga al centro dello schermo

 

clearscreen (cs) ; cancella gli oggetti di disegno dal documento

Impostazioni della penna

pensize n (ps n)

pensize 3; lo spessore della linea è di 3 punti

 

pencolor "colore" (pc "colore")

pencolor [n] (pc [n])

pencolor "red" ; colore impostato per nome

pencolor [5] ; colore impostato per codice numerico

 

pentransparency n

pentransparency 80 ; definisce la trasparenza della penna all'80%

 

penstyle "stile"

penstyle "solid" ; linea piena (impostazione predefinita)

penstyle "dashed" ; linea tratteggiata


Nota didattica.

Oggetti grafici (shapes)

Il disegno di forme precostituite non è una caratteristica tipica della turtle graphics ma LibreLogo offre questa possibilità. In particolare, il disegno del cerchio conviene perché è molto veloce.

Inoltre, anche i testi scritti su un disegno sono considerati oggetti grafici.

 

circle n

circle 100 ; disegna una circonferenza (o un cerchio colorato) di diametro 10 con il centro nella posizione della turtle

 

point ; disegna un punto nella posizione della turtle con le dimensioni e il colore della penna

 

label "testo"

label “Ciao mondo!” ; stampa il testo "Ciao mondo!" a partire dalla posizione e dall'orientamento della turtle

 

Vediamo un esempio con l'applicazione di label e point.

d1=19
d2=30
repeat 7 [
  pensize 2
  pencolor “blue”
  pd forward 120 pu
  pensize d2
  pencolor [18]
  pd point pu
  label “Ciao mondo!”
  back 120
  forward 80
  pensize d1
  pencolor [8]
  pd point pu
  back 80
  right 360/7
]

Turtle graphics label e point

Figura. Scritte generate con l'istruzione label, cerchi generati con l'istruzione point

Numeri

LibreLogo supporta due tipi di numeri e passa automaticamente da un tipo all'altro.

  1. Interi in precisione arbitraria. Gli interi in LibreLogo non soffrono di problemi di overflow classico a 32 o 64 bit. La grandezza dei numeri interi è limitata unicamente dalla memoria RAM disponibile del computer.
  2. Decimali in virgola mobile. Decimali in doppia precisione (64 bit) secondo lo standard IEEE 754.
    L'intervallo dei numeri rappresentabili è:
    2.22*10^-308 <= |x| <= 1.79*10^308 unito a x = 0.

Variabili

Creazione e assegnazione

a=5

b=a-3

a=a+1

 

Operazioni aritmetiche

7+2 ; addizione

7-2 ; sottrazione

7*2 ; moltiplicazione

7/2 ; divisione

7**2 ; elevamento al quadrato

7**0.5 ; radice quadrata

Cicli

repeat numero [ comandi ] ; ripete numero volte il blocco di [ comandi ], attenzione allo spazio che separa le parentesi dalle istruzioni

; scrittura su un'unica linea

repeat 10 [ forward 10 left 45 circle 10 ]

; scrittura su più linee con indentazione

repeat 10 [
  forward 10
  left 45
  circle 10
]

Il colore si può assegnare in vari modi. Per le istruzioni dettagliate e complete, rimando al manuale ufficiale dei LibreLogo.

Qui riporto solo i codici numerici e i nomi dei 24 colori principali.

0, black
1, silver
2, gray/grey
3, white
4, maroon
5, red
6, purple
7, fuchsia/magenta
8, green
9, lime
10, olive
11, yellow
12, navy
13, blue
14, teal
15, aqua
16, pink
17, tomato
18, orange
19, gold
20, violet
21, skyblue
22, chocolate
23, brown
24, invisible


Crediti.

Contenuti originali di Gianfranco Bo, rilasciati nel pubblico dominio (CC0).
LibreOffice è un marchio registrato di The Document Foundation. Gli screenshot dell’interfaccia provengono dal software LibreOffice (v.26.2).


Pace e bene a tutti.

GfBo


Data creazione: luglio 2026

Ultimo aggiornamento: luglio 2026


Sito Web realizzato da Gianfranco Bo