025 Python 3 + Turtle: Disegnare poligoni regolari colorati Inscritti

10 Giugno, 2023 (13:36) | Python | By: sargonsei

#
# 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
#