#
# 025-Python 3 + turtle + math: Disegnare con poligoni regolari colorati Inscritti
#
def DATI(): # ) Definisce la funzione DATI().
ML=0; ML = int(input("Numero massimo di lati del poligono regolare? ")) # ) Chiedere il numero massimo di lati componenti il poligono regolare
L=0; L = float(input("Lunghezza di ciascun lato? ")) # ) Chiedere la lunghezza di ciascun lato dei poligoni regolari
return ML, L # ) La funzione termina restituendo il contenuto delle variabili ML e L
def STAMPA(NL, L): # ) Definisce la funzione STAMPA().
print(f"\nIl poligono regolare con {NL} lati ciascuno dei quali ha lunghezza {L} ha:")
RAGC = (L / 2) / math.sin(math.radians(180/NL)) # ) Calcolare il raggio del cerchio circoscritto
print("Raggio del cerchio circoscritto = ", RAGC)
RAGI = (L / 2) / math.tan(math.radians(180/NL)) # ) Calcolare il raggio del cerchio inscritto
print("Raggio del cerchio inscritto = Apotema = ", RAGI)
print("Perimetro = ", NL*L)
print("Area = ", NL*L*RAGI/2)
MAXLATI, LATO = DATI() # ) Chiama la funzione DATI().
import math # ) Importare il modulo math
import turtle # ) Importare il modulo turtle
TELA01 = turtle.Screen() # ) Creare il piano cartesiano TELA01 su cui disegnare
TELA01.bgcolor("pink") # ) Impostare il colore dello sfondo
MATITA01 = turtle.Turtle() # ) Creare l’oggetto MATITA01 con cui disegnare
MATITA01.speed(2) # ) Impostare velocità di esecuzione per MATITA01
MATITA01.pensize(1) # ) Definire lo spessore della linea MATITA01
MATITA01.color(1,0,0) # ) Importare il colore dell'oggetto MATITA01
MATITA02 = turtle.Turtle() # ) Creare l’oggetto MATITA02 con cui disegnare
MATITA02.speed(1) # ) Impostare velocità di esecuzione per MATITA02
MATITA02.pensize(1) # ) Definire lo spessore della linea MATITA02
MATITA02.color(0,0,0) # ) Importare il colore dell'oggetto MATITA02
DELTA = 0 # ) Definire la variabile DELTA
for LATI in range(MAXLATI, 2, -1): # Inizio del ciclo che verrà ripetuto varie volte, da MAXLATI a 2 incrementando di -1.
STAMPA(LATI, LATO) # Chiama la funzione STAMPA().
CB = bin(LATI + 16) # ) Convertire il parametro da numero decimale a numero binario
COL =[int(CB[-3]), int(CB[-2]), int(CB[-1])] # ) Convertire il parametro da numero binario a variabile -lista
MATITA02.color(COL) # ) Imposta il colore dell'oggetto MATITA02
ANG = 360 / LATI # ) Definire la variabile contenente l'angolo al vertice di ciascun triangolo
RAG = (LATO / 2) / math.sin(math.radians(ANG / 2)) # ) Calcolare il raggio del cerchio circoscritto
if LATI == 5: # ) Controllare se LATI = 5
DELTA = DELTA + ((LATO / 2) / math.sin(math.radians((360 / (1+LATI)) / 2)) - RAG) / 2
if LATI == 4: # ) Controllare se LATI = 4
DELTA = DELTA + ((LATO / 2) / math.sin(math.radians((360 / (1+LATI)) / 2)) - RAG) / 2
if LATI == 3: # ) Controllare se LATI = 3
DELTA = DELTA + ((LATO / 2) / math.sin(math.radians((360 / (1+LATI)) / 2)) - RAG) / 1.3
MATITA01.goto(0, (RAG + DELTA)) # ) Tracciare, con l’oggetto MATITA01, una linea di cui sono fornite le coordinate del punto finale
MATITA02.penup() # ) Impedire a MATITA02 di scrivere.
MATITA02.goto(0, (RAG + DELTA)) # ) Tracciare, con l’oggetto MATITA02, una linea di cui sono fornite le coordinate del punto finale
MATITA02.pendown() # ) Consentire a MATITA02 di scrivere.
POS = (0, 0) # ) Definisce la variabile-Lista contenente i numeri 0 e 0
ANG = 360 / LATI # ) Calcola l'angolo interno di ciascuno spicchio del poligono
MATITA02.begin_fill() # ) Prima istruzione per disegnare una figura piena di colore
for CONT in range(LATI): # ) Inizio del ciclo 'for' che verrà ripetuto un numero di volte pari al contenuto della variabile LATI.
MATITA01.circle(-RAG, ANG) # ) Tracciare, con l’oggetto MATITA01, un arco di circonferenza avente raggio RAG ed ampiezza ANG.
POS = MATITA01.position() # ) Mette nella variabile-Lista POS le coordinate del cursore di MATITA01
MATITA02.goto(POS) # ) Traccia, con MATITA02, una retta fino al punto avente coordinate POS
MATITA02.end_fill() # ) Ultima istruzione per disegnare una figura piena di colore
MATITA01.reset() # ) Cancella quanto disegnato con MATITA01, porta nella posizione (X=0, Y=0) e lo orienta verso destra.
MATITA01.color(0,0,0) # ) Imposta il colore dell'oggetto MATITA01
MATITA02.color(0,0,0) # ) Imposta il colore dell'oggetto MATITA02
MATITA02.penup() # ) Impedire a MATITA02 di scrivere..
MATITA02.goto(0, (LATO + 10)) # ) Posizionare MATITA02 nel punto dove dovrà iniziare a scrivere
MATITA02.pendown() # ) Consentire a MATITA02 di scrivere.
MATITA02.write("Fine del disegno") # ) Scrive un messaggio sul piano cartesiano
MATITA02.hideturtle() # ) Rendere invisibile l'indicatore di direzione dell’oggetto MATITA02
TELA01.mainloop() # ) Attendere che l'utente chiuda la finestra TELA01
#