029 Python3 + Turtle: disegnare un cubo forato visto in prospettiva.

26 Luglio, 2023 (14:47) | Python | By: sargonsei

#
# 029-python3 + Turtle: disegnare un cubo forato visto in prospettiva.
#
import math                   # Importare il modulo math
print("Questo programma, dopo aver chiesto il raggio di un cerchio")
print("e l'inclinazione della prospettiva,")
print("disegna un cubo in prospettiva, avente il lato pari a 3 volte il raggio del cerchio;")
print("al centro di ciascun lato del cubo, trova posto il cerchio, disegnato.")
print("Questo script funziona perfettamente solo quando l'angolo di prospettiva è compreso fra 1 e 89 gradi.")
RAG = input("Raggio del cerchio (max 100): ")
RAG = float(RAG)
ANG = input("Angolo della prospettiva (maggiore di 0 e minore di 90 gradi): ")
ANG = float(ANG)

def DIS_QUAD(ANG, RAG): # Inizio definizione funzione DIS_QUAD(), la quale richiede 2 parametri, che verranno conservati nelle variabili ANG e RAG
    turtle.begin_fill()      # Prima istruzione per disegnare una figura piena del colore corrente
    turtle.left(ANG)         # Modifica l'angolo corrente di ANG gradi verso sinistra
    turtle.forward(RAG * 3)  # Traccia il primo lato del quadrilatero
    turtle.right(90 + ANG)   # Modifica l'angolo corrente di (90+ANG) gradi verso destra
    turtle.forward(RAG * 3)  # Traccia il secondo lato del quadrilatero
    turtle.right(90 - ANG)   # Modifica l'angolo corrente di (90-ANG) gradi verso destra
    turtle.forward(RAG * 3)  # Traccia il terzo lato del quadrilatero
    turtle.right(90 + ANG)   # Modifica l'angolo corrente di (90-ANG) gradi verso destra
    turtle.forward(RAG * 3)  # Traccia il quarto lato del quadrilatero
    turtle.end_fill()        # Ultima istruzione per disegnare una figura piena del colore corrente

def DIS_CER(ANG, RAG): # Inizio definizione funzione DIS_CER(), la quale richiede 2 parametri, che verranno conservati nelle variabili ANG e RAG
    turtle.begin_fill()               # Prima istruzione per disegnare una figura piena del colore corrente
    RAG1 = (RAG * math.cos(math.radians(ANG)))/(1 + math.sin(math.radians(ANG)))
    RAG2 = RAG / math.tan(math.radians((90-ANG)/2))
    turtle.circle(-RAG1, 90+ANG)      # Tracciare un arco di circonferenza avente raggio = -RAG1 (punti)
    turtle.circle(-RAG2, (90-ANG))    # Tracciare un arco di circonferenza avente raggio = -RAG2 (punti)
    turtle.circle(-RAG1, 90+ANG)      # Tracciare un arco di circonferenza avente raggio = -RAG1 (punti)
    turtle.circle(-RAG2, (90-ANG))    # Tracciare un arco di circonferenza avente raggio = -RAG2 (punti)
    turtle.end_fill()                 # Ultima istruzione per disegnare una figura piena del colore corrente

import turtle               # Importare modulo turtle
turtle.bgcolor("pink")      # Impostare il colore dello sfondo (di default è bianco)
turtle.speed(10)            # Impostare velocità di esecuzione oggetto usato per disegnare

turtle.color("grey")    # Impostare il colore dell’oggetto usato per disegnare
turtle.goto(-RAG * 3, 0)        
DIS_QUAD(0, RAG)         # Chiama la funzione DIS_QUAD() previo trasferimento del contenuto delle variabili ANG e RAG.
turtle.home()            # Posiziona l’oggetto con cui scrive nel punto del piano cartesiano avente coordinate X=0, Y=0 e lo orienta verso destra

turtle.color("cyan")    # Impostare il colore dell’oggetto usato per disegnare
DIS_QUAD(ANG, RAG)      # Chiamare la funzione DIS_QUAD() previo trasferimento del contenuto delle variabili ANG e RAG.
turtle.home()           # Posiziona l’oggetto con cui scrive nel punto del piano cartesiano avente coordinate X=0, Y=0 e lo orienta verso destra

turtle.color("red")   # Impostare il colore dell’oggetto usato per disegnare
turtle.left(90 + ANG) # Modificare l'angolo corrente di ANG gradi verso sinistra
DIS_QUAD(90-ANG, RAG) # Chiamare la funzione DIS_QUAD() previo trasferimento del contenuto delle variabili ANG e RAG.
turtle.home()         # Posiziona l’oggetto con cui scrive nel punto del piano cartesiano avente coordinate X=0, Y=0 e lo orienta verso destra

turtle.home()                     # Posizionare l’oggetto con cui scrive nel punto del piano cartesiano avente coordinate X=0, Y=0 e lo orienta verso destra
turtle.color("black")             # Impostare il colore dell’oggetto usato per disegnare
turtle.penup()                    # Impedire di disegnare.
turtle.goto(-RAG * 1.5, -RAG / 2) # Impostare le coordinate del punto iniziale della prossima linea.
turtle.pendown()                  # Consentire di disegnare.
turtle.begin_fill()               # Prima istruzione per disegnare una figura piena di colore
turtle.circle(-RAG)               # Tracciare una circonferenza avente raggio = -RAG (punti)
turtle.end_fill()                 # Ultima istruzione per disegnare una figura piena del colore corrente

turtle.color("blue")      # Impostare il colore dell’oggetto usato per disegnare
turtle.penup()            # Impedire di disegnare.
turtle.forward(RAG * 1.5) # Spostare il puntatore in avanti
turtle.left(ANG)          # Modifica l'angolo corrente di ANG gradi verso sinistra
turtle.forward(RAG * 1.5) # Spostare il puntatore in avanti
turtle.pendown()          # Consentire di disegnare.
DIS_CER(ANG, RAG)         # Chiamare la funzione DIS_CER() previo trasferimento del contenuto delle variabili ANG e RAG.
turtle.penup()            # Impedire di disegnare.
turtle.home()             # Posiziona l’oggetto con cui scrive nel punto del piano cartesiano avente coordinate X=0, Y=0 e lo orienta verso destra

turtle.color("DarkRed")    # Impostare il colore dell’oggetto usato per disegnare
turtle.forward(-RAG * 1.5) # Impedire di disegnare.
turtle.left(ANG)           # Modifica l'angolo corrente di ANG gradi verso sinistra
turtle.forward(RAG * 0.5)  # Spostare il puntatore in avanti
turtle.left(180-ANG)       # Modifica l'angolo corrente di ANG gradi verso sinistra
turtle.pendown()           # Consentire di disegnare.
DIS_CER(90-ANG, RAG)       # Chiamare la funzione DIS_CER() previo trasferimento del contenuto delle variabili ANG e RAG.
turtle.penup()             # Impedire di disegnare.
turtle.home()              # Posiziona l’oggetto con cui scrive nel punto del piano cartesiano avente coordinate X=0, Y=0 e lo orienta verso destra

turtle.mainloop()      # Attende che l'utente chiuda il piano cartesiano
# turtle.exitonclick() # Chiude il piano cartesiano cliccando su di esso.
#