lunedì 1 dicembre 2008

Realizzare un grafico di funzione in Phyton.

Da poco ho iniziato la mia avventura con Phyton ed è sorprendente quanto sia flessibile,
il binding dinamico ti semplifica la vita in fase di stesura. Il problema stà nel fatto di essere troppo pignolo a run-time e a causa dell'identazione che dà la semantica al programma.
Ogni tanto spuntano fuori "indetationerror" senza una logica spiegazione.
Comunque quì allego la mia prima applicazione(applicazioncina);il codice è tutto commentato.
Risultato per la funzione y=x^2/20




Codice.
ho diviso l'applicazione in due parti.
Il main, dove vi è definata la funzione.

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import plot
# salvo la lista dei punti nel file result.txt
# apro il file in scrittura
f = open("result.txt","w")
# vettore di punti da visualizzare
plotList = [];
# voglio visualizzare la funz y=x^2/20 nel range x=[-60,60]
for x in range(-60,60):
y=(x**2)/20
f.write(str([x,y])+"\n")
plotList.append([x,y])

f.close()
print " Fine! Il risultato e' stato salvato nel file result.txt ";

#Visualizzo il plot, passo la lista di punti come arcomento
plot.view(plotList)



l'altra parte, plot.y, contiene il codice del plot.

from Tkinter import *

def view(pointList):
root = Tk()
root.title('MyPlot')
#origine delle assi
originX = 100
originY = 250

try:
#creo un canvas
canvas = Canvas(root, width=500, height=300, bg = 'white')
canvas.pack()
# aggiungo pulsante di quit
Button(root, text='Quit', command=root.quit).pack()

# creo assi
canvas.create_line(originX ,originY ,400,250, width=2)
canvas.create_line(originX ,originY ,100,50, width=2)

for i in range(11):
x = originX + (i * 30)
canvas.create_line(x,originY ,x,originY -5 , width=2)
canvas.create_text(x,originY +4, text='%d'% (10*i), anchor=N)

#salvo il punto iniziale e lo trasformo in cordinate cartesiane traslate all'origine
initp = pointList[0];
oldp = [(originX + initp[0]),(originY - initp[1])]


for p in pointList :
xx = originX + p[0]
yy = originY - p[1]
#creo le linee per unire i punti di colore blu
canvas.create_line(oldp[0],oldp[1],xx , yy, fill="blue")
oldp = [xx,yy]

except:
print 'An error has occured!'

root.mainloop()


Nessun commento: