# Pitagora versione 1 # Importa modulo con le funzioni per gestire la tararuga import turtle # Importa modulo con le funzioni matematiche import math # Importa modulo per Beep import winsound def impostazioni_tartaruga(): # Disabilita il resize dello schermo turtle.Screen().cv._rootwindow.resizable(False, False) turtle.onscreenclick(evento_mouse_click) # Elimina punti disegnati turtle.onkey(undo,"space") turtle.listen() turtle.hideturtle() turtle.shape("turtle") turtle.color("green") turtle.shapesize(stretch_wid=2, stretch_len=2, outline=None) turtle.speed(2) # Disegna il titolo del programma def disegna_titolo(): turtle.penup() turtle.pencolor('lime') turtle.goto(0,260) turtle.write('La geometria della tartaruga Pitagora',align='center',font=("Garamond", 40, "italic")) # Disegna space=undo def disegna_undo(): ruota=gradi(230,-310) turtle.left(ruota) turtle.penup() turtle.pencolor('red') turtle.goto(230,-310) turtle.write('spazio=undo',align='center',font=("Arial", 14, "normal")) home() # Imposta lo stato di riposo della tartaruga Pitagora def home(): turtle.pencolor('black') turtle.home() turtle.setheading(90) turtle.showturtle() # Elimina punti disegnati def undo(): if flag: turtle.undo() winsound.Beep(500,300) # Disegna l'asse delle ordinate Y nel piano cartesiano def disegna_asse_ordinate(): turtle.goto(0,-295) turtle.pendown() turtle.goto(0,245) turtle.write('Y',align='center',font=("Garamond", 12, "normal")) turtle.penup() home() # Disegna l'asse delle ascisse X nel piano cartesiano def disegna_asse_ascisse(): turtle.setheading(0) turtle.goto(-360,0) turtle.pendown() turtle.goto(347,0) turtle.penup() turtle.goto(355,-8) turtle.write('X',align='center',font=("Garamond", 12, "normal")) home() # Disegna l'origine del piano cartesiano def disegna_origine(): turtle.penup() turtle.goto(10,-20) turtle.write('O',align='center',font=("Garamond", 12, "normal")) home() # Disegna i segni delle coordinate X, Y nelle quattro sezioni del piano cartesiano def disegna_meno_piu(): turtle.penup() # Sezione in alto a sinistra (-/+) ruota=gradi(-345,235) turtle.left(ruota) turtle.goto(-345,235) turtle.write('-/+',align='center',font=("Arial", 20, "bold")) home() # Sezione in alto a destra (+/+) ruota=gradi(345,235) turtle.left(ruota) turtle.goto(345,235) turtle.write('+/+',align='center',font=("Arial", 20, "bold")) home() # Sezione in basso a sinistra (-/-) ruota=gradi(-345,-295) turtle.left(ruota) turtle.goto(-345,-295) turtle.write('-/-',align='center',font=("Arial", 20, "bold")) home() # Sezione in basso a destra (+/-) ruota=gradi(345,-295) turtle.left(ruota) turtle.goto(345,-295) turtle.write('+/-',align='center',font=("Arial", 20, "bold")) home() # Calcola utilizzando il teorema di Carnot, l'angolo di rotazione della tartaruga Pitagora # per raggiungere le coordinate in cui disegnare il punto sul piano cartesiano def gradi(x,y): # Clcolo ipotenusa con il teorema di Pitagora ipotenusa=math.sqrt(pow(x,2)+pow(y,2)) # Calcolo del coseno dell'angolo di rotazione della tartaruga Pitagora con il Teorema di Carnot if x!=0 and y!=0: coseno=(pow(x,2)+pow(ipotenusa,2)-pow(y,2))/(2*x*ipotenusa) elif x==0: coseno=0 elif x<0 and y==0: coseno=-1 else: coseno=1 # Conversione del coseno dell'angolo di rotazione della tartaruga Pitagora per ottenere l'angolo di rotazione angolo=math.degrees(math.acos(coseno)) if y>=0: up=1 elif y<0: up=-1 return (angolo*up)-90 # Controlla il click del mouse e disegna sia il punto, sia le sue coordinate nella posizine scelta def evento_mouse_click(x, y): # Delimita l'area in cui disegnare i punti if x>=-360 and x<=355 and y<=230 and y>=-255: global flag flag=True ruota=gradi(x,y) turtle.left(ruota) turtle.goto(x,y) # In base alla sezione del piano in cui si clicca imposta il colore del punto da disegnare if x>0 and y>0: colore='grey' elif x<0 and y>0: colore='blueviolet' elif x>0 and y<0: colore='magenta' elif x<0 and y<0: colore='orange' else: colore='red' # Disegna il punto nella posizione richiesta turtle.dot(10,colore) if x>=247: turtle.goto(x-130,y-7) elif y>=0 and y<=10: turtle.goto(x+15,y+10) elif y<=0 and y>=-10: turtle.goto(x+15,y-20) else: turtle.goto(x+15,y-7) turtle.write('(X= '+str(int(x))+', Y= '+str(int(y))+")",font=("Arial", 12, "normal")) home() else: # Emette un beep se si clicca fuori dall'area del piano cartesiano winsound.Beep(500,300) # Inizio programma con sequenza funzioni eseguite flag=False impostazioni_tartaruga() disegna_titolo() home() disegna_asse_ordinate() disegna_asse_ascisse() disegna_origine() disegna_meno_piu() disegna_undo() # Si mette in ascolto per controllare quando viene attivato il click del mouse turtle.mainloop()