4.3. Rette, parabole, cubiche... Come disegnare rette che attraversano il nostro piano cartesiano. L’attività svolta nei capitoli precedenti, usa i metodi della classe Plain definita nella libreria pycart. Se vogliamo disegnare il grafico di funzioni, dobbiamo usare i metodi forniti da un’altra classe definita nella libreria pyplot. Questa nuova classe è Plot che fornisce i metodi che permettono di tracciare funzioni di una variabile del tipo y=f(x) con il metodo xy(“<funzione in x>”) o x=f(y) usando il metodo yx(“<funzione in y>”). Se vogliamo tracciare una retta possiamo usare uno dei due metodi precedenti. L’equazione esplicita della retta è: y=mx+q. quest’equazione permette di tracciare quasi tutte le rette del piano... ne restano escluse solo infinite, tutte quelle parallele all’asse y. Per tracciare la retta di equazione: devo 1. caricare la libreria pyplot, >>> from pyplot import * 2. predisporre il piano cartesiano, >>> p=Plot() 3. posso tracciare gli assi, che fanno sempre comodo, >>> p.axes(True) 4. inviare al piano il comando di rappresentare la retta: >>> p.xy(“2/3*x+4”) Viene tracciata una retta... peccato che non sia quella che ci aspettiamo, se il coefficiente angolare è 2/3, non dovrebbe essere parallela all’asse x! Il fatto è che Python, quando esegue una divisione tra numeri interi, calcola il quoziente troncando il numero senza i decimali. Il calcolo 2/3 in Python dà come risultato 0 per ottenere il numero razionale 2/3 devo riscrivere l’espressione in modo che o il numeratore o il denominatore sia un numero di tipo float: >>> p.xy(“2./3*x+4”) Per poter tracciare una retta parallela all’asse y devo usare il metodo che permette di tracciare funzioni del tipo x=f(y), quindi per disegnare la retta di equazione x=4 basta dare il comando: >>> p.yx(“4”) Per poter affrontare problemi più significativi, è utile una funzione che dati due numeri, il coefficiente angolare e il termine noto, produca la stringa che contiene la funzione della retta. La possiamo realizzare con il meccanismo della costruzione di stringhe usando i segnaposto “%s” come è spiegato con diversi esempi nei primi capitoli sulla programmazione in Python. >>> def retta(m, q):

return “%s*x+%s” % (m, q)

Facciamo una prova stampando la stringa ottenuta: >>> print retta(3./5, 6) 0.6*x+6 Possiamo ora usare questa funzione per tracciare una sequenza di rette con il coefficiente che va da 0 a 10. Innanzitutto ripuliamo il piano dalle rette precedenti: >>> p.reset() poi avviamo un ciclo che disegni tutte le rette richieste: >>> for m in range(11):

p.xy(retta(m, 4))

Se volessimo disegnare le rette con coefficiente angolare 1/2, 1/3, 1/4, ...1/10, la faccenda sarebbe un pochino più complicata per due motivi: Bisogna costringere Python a fare la divisione in virgola mobile e non troncando il risultato, Il primo valore di i è zero e quando nel ciclo si tenta di eseguire la divisione 1/i si ottiene un errore. La soluzione al primo problema si ottiene scrivendo 1./i invece che 1/i. Per risolvere il secondo problema, bisogna modificare il ciclo in modo che range restituisca gli interi a partire da 1 anziché da 0: range(1, 11): >>> for num in range(1, 11):

p.xy(retta(1./num, 4))

La funzione passata come argomento al metodo xy() ovviamente, può essere costruita a fantasia, basta che rispetti la sintassi di Python. Se il polinomio è di secondo grado otterremo una parabola con l’asse parallelo all’asse y: >>> p.xy(“0.5*x*x-2./3*x+4”) Anche qui, per i nostri esperimenti conviene costruire una funzione che dati i tre coefficienti del trinomio di secondo grado restituisca la stringa che lo rappresenta: >>> def parabola(a, b, c):

return “%s*x*x+%s*x+%s” % (a, b, c)

e possiamo provarla stampando il suo risultato: >>> print parabola(-.5, -1, 3) -0.5*x*x+-1*x+3 o chiedendo a pyplot di disegnarla per punti: >>> p.reset() >>> p.xy(parabola(-.5, -1, 3)) A questo punto possiamo costruirci gli strumenti per tracciare parabole cubiche o polinomi di 4°, 5°, 6°, ... grado osservando come cambia la forma del grafico al variare dei coefficienti.

Riassumendo Il metodo xy(<funzione>) della classe Pyplot permette di tracciare una qualunque funzione data nella forma y=f(x). La funzione passata al metodo come argomento deve essere una stringa. La stringa può essere scritta pari pari da tastiera oppure può essere costruita usando i metodi messi a disposizione da Python.