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()