import turtle def punti(tupla): """ Data una tupla del tipo ((x_1, y_1), (x_2, y_2), (x_n, y_n),...) restituisce una funzione f(x_n): y=y_n. """ return lambda x: dict(tupla)[float(x)] class Varie(): """ Funzioni varie per turtle. """ def vai(self, x, y): """ Sposta il cursore al punto (x, y) senza tracciare una linea. """ self.pu() self.goto(x,y) self.pd() class Freccia(turtle.Pen, Varie): """ Cursore di turtle personalizzato. """ def __init__(self): super(Freccia, self).__init__() self.speed(0) self.shape("triangle") self.shapesize(0.5) class Grafico(turtle.Pen, Varie): def __init__(self, X=10, Y=10): """ Inizializzazione del grafico Fornire le dimensione degli assi se necessario. """ super(Grafico, self).__init__() turtle.title("Grafico") self.X = X self.Y = Y self.canvas = turtle.getcanvas() self.frame = turtle._Screen._root self.assi() self.frecce() def assi(self): """ Disegna gli assi del piano cartesiano. """ turtle.setworldcoordinates(-(self.X+2), -(self.Y+2), self.X+2, self.Y+2) self.hideturtle() self.speed(0) self.vai(-self.X, 0) self.fd(self.X*2) self.vai(0, -self.Y) self.lt(90) self.fd(self.Y*2) def frecce(self): """ Disegna le frecce e i nomi degli assi. """ a = Freccia() a.vai(self.X, 0) a.write(" x", font=("helvetiva",16)) b = Freccia() b.lt(90) b.vai(0, self.Y) b.write(" y", font=("helvetiva",16)) def disegna(self, funzione, inizio, fine, colore="blue"): """ Disegna una funzione nel piano cartesiano. """ medio = 2/self.X self.color(colore) try: self.vai(inizio,funzione(inizio)) except ZeroDivisionError: self.vai(inizio,funzione(inizio+1*medio)) for x in range(int(inizio/medio),int(fine/medio)+1): x *= medio try: self.goto(x, funzione(x)) except ZeroDivisionError: self.vai(x, funzione(x+1*medio)) def pulisci(self): """ Pulisce il canvas e ridisegna gli assi. """ self.reset() self.assi()