|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
GRAPHEUR DE FONCTIONS MATHÉMATIQUES
Information sur la source
Description
Permet de tracer un nombre illimité de fonctions mathématiques différentes ainsi que leurs dérivées sur un même graphique. La fenêtre graphique est entièrement paramétrable (dimensions, échelle...), ainsi que les couleurs des courbes.
Source
- # -*- coding: cp1252 -*-
- # Grapheur mathématique
- # Ecrit et immaginé par Amaury
-
- from math import *
- from Tkinter import *
- import tkMessageBox
- ux=0
- global select,h,m
- save=[]
- h=30
- m=50
- select="black"
- def onInit():
- global xmin,xmax,ymin,ymax,pasx,pasy,save
- h=30
- m=50
- lst1.create_rectangle(0,20,200,700,fill="ivory",outline="ivory")
- can.create_rectangle(0,0,700,700,fill="white",outline="white")
- try:
- xmin=float(eval(ent1.get()))
- except SyntaxError:
- xmin=-10
- try:
- xmax=float(eval(ent2.get()))
- except SyntaxError:
- xmax=10
- try:
- pasx=float(eval(ent3.get()))
- except SyntaxError:
- pasx=1
- try:
- ymin=float(eval(ent4.get()))
- except SyntaxError:
- ymin=-10
- try:
- ymax=float(eval(ent5.get()))
- except SyntaxError:
- ymax=10
- try:
- pasy=float(eval(ent6.get()))
- except SyntaxError:
- pasy=1
-
- dx=float(xmax-xmin)
- dy=float(ymax-ymin)
- ux=700/dx
- uy=700/dy
- uxx=(dx/700)
- #Coordonnées du O(0,0):
- xo=ux*(-xmin)
- yo=uy*ymax
- # Axes:
- can.create_line(0,yo,700,yo,fill="red")
- can.create_line(xo,0,xo,700,fill="red")
- i=xo
- j=yo
- while i>-1:
- can.create_line(i,yo-2,i,yo+2,fill="red")
- i=i-(ux*pasx)
- while j>-1:
- can.create_line(xo-2,j,xo+2,j,fill="red")
- j=j-(uy*pasy)
- i=xo
- j=yo
- while i<701:
- can.create_line(i,yo-2,i,yo+2,fill="red")
- i=i+(ux*pasx)
- while j<701:
- can.create_line(xo-2,j,xo+2,j,fill="red")
- j=j+(uy*pasy)
-
- try:
- onCalc(str(ent10.get()),select,xo,yo,uy,uxx,xmin)
- save=[[str(ent10.get()),select]]
- lst1.create_text(m,h,text="f(x)="+str(ent10.get()),fill=select)
- h=h+15
- except SyntaxError:
- pass
-
- def onAdd():
- global select,h,m,xmin,xmax,ymin,ymax,pasx,pasy
-
-
-
- dx=float(xmax-xmin)
- dy=float(ymax-ymin)
- ux=700/dx
- uy=700/dy
- uxx=(dx/700)
- #Coordonnées du O(0,0):
- xo=ux*(-xmin)
- yo=uy*ymax
- # Axes:
- can.create_line(0,yo,700,yo,fill="red")
- can.create_line(xo,0,xo,700,fill="red")
- i=xo
- j=yo
- while i>-1:
- can.create_line(i,yo-2,i,yo+2,fill="red")
- i=i-(ux*pasx)
- while j>-1:
- can.create_line(xo-2,j,xo+2,j,fill="red")
- j=j-(uy*pasy)
- i=xo
- j=yo
- while i<701:
- can.create_line(i,yo-2,i,yo+2,fill="red")
- i=i+(ux*pasx)
- while j<701:
- can.create_line(xo-2,j,xo+2,j,fill="red")
- j=j+(uy*pasy)
-
- try:
- onCalc(str(ent10.get()),select,xo,yo,uy,uxx,xmin)
- save.append([str(ent10.get()),select])
-
- if h<690:
- lst1.create_text(m,h,text="f(x)="+str(ent10.get()),fill=select)
- else:
- h=30
- m=150
- lst1.create_text(m,h,text="f(x)="+str(ent10.get()),fill=select)
-
- h=h+15
-
- except SyntaxError:
- pass
- except NameError:
- onCalc(str(ent10.get()),"black",xo,yo,uy,uxx,xmin)
- if h<690:
- lst1.create_text(m,h,text="dy/dx("+str(ent10.get())+")",fill="black")
- else:
- h=30
- m=125
- lst1.create_text(m,h,text="dy/dx("+str(ent10.get())+")",fill="black")
-
- h=h+15
- def onCalc(fonction,couleur,xo,yo,uy,uxx,xmin):
- valeurs=[]
- a=0
- while a<701:
- x=float(xmin+(a*uxx))
- try:
- y=-eval (fonction)
- valeurs.append([x,y])
- a=a+1
- except ValueError:
- y=0
- valeurs.append([x,y])
- a=a+1
- except OverflowError:
- y=0
- valeurs.append([x,y])
- a=a+1
- except ZeroDivisionError:
- y=0
- valeurs.append([x,y])
- a=a+1
- except NameError:
- tkMessageBox.showerror(title="Erreur",message="""Fonction " """ + str(fonction) + """" inconnue""")
- break
-
-
- a=0
- while a<700:
- local0=valeurs[a]
- local1=valeurs[a+1]
- x1=a
- x2=a+1
- y1=int((local0[1]*uy)+yo)
- y2=int((local1[1]*uy)+yo)
- can.create_line(x1,y1,x2,y2,fill=couleur)
- a=a+1
- def onSelect(e):
- global select
-
- select=listb.get(listb.curselection())
- lab.configure(text=select)
- listb.configure(bg=select)
-
- def onDerive():
- global select,h,m,xmin,xmax,ymin,ymax,pasx,pasy
- try:
- xmin=float(eval(ent1.get()))
- except SyntaxError:
- xmin=-10
- try:
- xmax=float(eval(ent2.get()))
- except SyntaxError:
- xmax=10
- try:
- pasx=float(eval(ent3.get()))
- except SyntaxError:
- pasx=1
- try:
- ymin=float(eval(ent4.get()))
- except SyntaxError:
- ymin=-10
- try:
- ymax=float(eval(ent5.get()))
- except SyntaxError:
- ymax=10
- try:
- pasy=float(eval(ent6.get()))
- except SyntaxError:
- pasy=1
- onDeriv(str(ent10.get()),select)
- save.append(["derive",str(ent10.get()),select])
- if h<690:
- lst1.create_text(m,h,text="dy/dx("+str(ent10.get())+")",fill=select)
- else:
- h=30
- m=150
- lst1.create_text(m,h,text="dy/dx("+str(ent10.get())+")",fill=select)
- h=h+15
-
- def onDeriv(fonction,couleur):
- global select,h,m
- valeurs=[]
- a=0
-
- dx=float(xmax-xmin)
- dy=float(ymax-ymin)
- ux=700/dx
- uy=700/dy
- uxx=(dx/700)
- #Coordonnées du O(0,0):
- xo=ux*(-xmin)
- yo=uy*ymax
- i=xo
- j=yo
- while a<701:
- x=float(xmin+(a*uxx))
- try:
- y=-eval (fonction)
- valeurs.append([x,y])
- a=a+1
- except ValueError:
- y=0
- valeurs.append([x,y])
- a=a+1
- except OverflowError:
- y=0
- valeurs.append([x,y])
- a=a+1
- except ZeroDivisionError:
- y=0
- valeurs.append([x,y])
- a=a+1
- except NameError:
- tkMessageBox.showerror(title="Erreur",message="""Fonction " """ + str(fonction) + """" inconnue""")
- break
- a=a+1
- a=0
- while a<350:
- try:
- y4=y3
- except NameError:
- y4=0
- local0=valeurs[a]
- local1=valeurs[a+1]
- dy=local1[1]-local0[1]
- dx=local1[0]-local0[0]
- y3=dy/dx
- y1=int((y4*uy)+yo)
- y2=int((y3*uy)+yo)
- can.create_line(2*a,y1,2*(a+1),y2,fill=couleur)
- a=a+1
-
- def onHelp():
- tkMessageBox.showinfo(title="Syntaxe",message="""Syntaxe des fonctions usuelles pour Python:
-
- notation usuelle <=> notation Python
- log(x)<=> log(x,base)
- ln(x) <=> log(x,exp(1))
- Racine(x) <=> sqrt(x)
- x^n <=> x**n
- E(x) <=> int(x)
- sin(x), cos(x) et tan(x) n'ont pas de syntaxe particulière""")
-
- def onRefresh():
- global save,xmin,xmax,pasx,ymin,ymax,pasy
- can.create_rectangle(0,0,700,700,fill="white",outline="white")
- try:
- xmin=float(eval(ent1.get()))
- except SyntaxError:
- xmin=-10
- try:
- xmax=float(eval(ent2.get()))
- except SyntaxError:
- xmax=10
- try:
- pasx=float(eval(ent3.get()))
- except SyntaxError:
- pasx=1
- try:
- ymin=float(eval(ent4.get()))
- except SyntaxError:
- ymin=-10
- try:
- ymax=float(eval(ent5.get()))
- except SyntaxError:
- ymax=10
- try:
- pasy=float(eval(ent6.get()))
- except SyntaxError:
- pasy=1
-
- dx=float(xmax-xmin)
- dy=float(ymax-ymin)
- ux=700/dx
- uy=700/dy
- uxx=(dx/700)
- #Coordonnées du O(0,0):
- xo=ux*(-xmin)
- yo=uy*ymax
- # Axes:
- can.create_line(0,yo,700,yo,fill="red")
- can.create_line(xo,0,xo,700,fill="red")
- i=xo
- j=yo
- while i>-1:
- can.create_line(i,yo-2,i,yo+2,fill="red")
- i=i-(ux*pasx)
- while j>-1:
- can.create_line(xo-2,j,xo+2,j,fill="red")
- j=j-(uy*pasy)
- i=xo
- j=yo
- while i<701:
- can.create_line(i,yo-2,i,yo+2,fill="red")
- i=i+(ux*pasx)
- while j<701:
- can.create_line(xo-2,j,xo+2,j,fill="red")
- j=j+(uy*pasy)
- a=0
- g=len(save)
- while a<g:
- local=save[a]
- if len(local)==3:
- onDeriv(local[1],local[2])
- elif len(local)==2:
- onCalc(local[0],local[1],xo,yo,uy,uxx,xmin)
- a=a+1
-
- def onZoom(facteur):
- global save,xmin,xmax,pasx,ymin,ymax,pasy
- try:
- xmin=float(eval(ent1.get()))
- except SyntaxError:
- xmin=-10
- try:
- xmax=float(eval(ent2.get()))
- except SyntaxError:
- xmax=10
- try:
- pasx=float(eval(ent3.get()))
- except SyntaxError:
- pasx=1
- try:
- ymin=float(eval(ent4.get()))
- except SyntaxError:
- ymin=-10
- try:
- ymax=float(eval(ent5.get()))
- except SyntaxError:
- ymax=10
- try:
- pasy=float(eval(ent6.get()))
- except SyntaxError:
- pasy=1
- xmin,xmax,ymin,ymax=xmin/facteur,xmax/facteur,ymin/facteur,ymax/facteur
- can.create_rectangle(0,0,700,700,fill="white",outline="white")
- dx=float(xmax-xmin)
- dy=float(ymax-ymin)
- ux=700/dx
- uy=700/dy
- uxx=(dx/700)
- #Coordonnées du O(0,0):
- xo=ux*(-xmin)
- yo=uy*ymax
- # Axes:
- can.create_line(0,yo,700,yo,fill="red")
- can.create_line(xo,0,xo,700,fill="red")
- i=xo
- j=yo
- while i>-1:
- can.create_line(i,yo-2,i,yo+2,fill="red")
- i=i-(ux*pasx)
- while j>-1:
- can.create_line(xo-2,j,xo+2,j,fill="red")
- j=j-(uy*pasy)
- i=xo
- j=yo
- while i<701:
- can.create_line(i,yo-2,i,yo+2,fill="red")
- i=i+(ux*pasx)
- while j<701:
- can.create_line(xo-2,j,xo+2,j,fill="red")
- j=j+(uy*pasy)
- a=0
- g=len(save)
- while a<g:
- local=save[a]
- if len(local)==3:
- onDeriv(local[1],local[2])
- elif len(local)==2:
- onCalc(local[0],local[1],xo,yo,uy,uxx,xmin)
- a=a+1
-
- def onFact():
- try:
- facteur=float(ent11.get())
- except ValueError:
- facteur=1.
- onZoom(facteur)
-
-
- root=Tk()
-
- can=Canvas(width=700,height=700)
- can.create_rectangle(0,0,700,700,fill="white",outline="black")
- can.grid (row=0,column=0,rowspan=30)
-
- lbl1=Label(root,text="Configuration de la fenètre de traçage:")
- lbl2=Label(root,text="Xmin =")
- lbl3=Label(root,text="Xmax =")
- lbl4=Label(root,text="Ymin =")
- lbl5=Label(root,text="Ymax =")
- lbl6=Label(root,text="Pas =")
- lbl7=Label(root,text="Pas =")
-
- listb=Listbox(root)
- lab=Label(root,text="_")
- listb.grid(row=10,column=2,rowspan=5)
- lab.grid(row=10,column=1)
- # Insertion des éléments dans la liste:
- for coul in ["gray", "blue", "orange", "yellow", "green", "cyan", "red", "pink", "skyblue", "gold","green"]:
- listb.insert(END,coul)
-
- # Un double click dans la liste appellera la fonction onSelect:
- listb.bind('<Double-1>',onSelect)
- ent1=Entry(root)
- ent2=Entry(root)
- ent3=Entry(root)
- ent4=Entry(root)
- ent5=Entry(root)
- ent6=Entry(root)
- bou1=Button(root,text="Nouvelle trace",command=onInit)
- bou2=Button(root,text="Quitter",command=root.quit)
- bou3=Button(root,text="Ajouter trace",command=onAdd)
- bou4=Button(root,text="Tracer dérivée",command=onDerive)
- bou5=Button(root,text="Syntaxe",command=onHelp)
- bou6=Button(root,text="Rafraichir",command=onRefresh)
-
- bou1.grid(row=28,column=1)
- bou2.grid(row=29,column=2)
- bou3.grid(row=27,column=1)
- bou4.grid(row=27,column=2)
- bou5.grid(row=29,column=1)
- bou6.grid(row=28,column=2)
- lbl1.grid(row=0,column=1,columnspan=2)
- lbl2.grid(row=1,column=1)
- lbl3.grid(row=2,column=1)
- lbl4.grid(row=4,column=1)
- lbl5.grid(row=5,column=1)
- lbl6.grid(row=3,column=1)
- lbl7.grid(row=6,column=1)
-
- ent1.grid(row=1,column=2)
- ent2.grid(row=2,column=2)
- ent3.grid(row=3,column=2)
- ent4.grid(row=4,column=2)
- ent5.grid(row=5,column=2)
- ent6.grid(row=6,column=2)
-
- lbl10=Label(root,text="Configuration du Grapheur:")
- lbl11=Label(root,text="f(x)=")
-
- ent10=Entry(root)
-
-
- lbl10.grid(row=8,column=1,columnspan=2)
- lbl11.grid(row=9,column=1)
- ent10.grid(row=9,column=2)
- ent11=Entry(root)
- bou10=Button(root,text="Zoom x2",command=lambda arg=2.:onZoom(arg))
- bou11=Button(root,text="Zoom x4",command=lambda arg=4.:onZoom(arg))
- bou12=Button(root,text="Zoom x0.5",command=lambda arg=0.5:onZoom(arg))
- bou13=Button(root,text="Zoom x0.25",command=lambda arg=0.25:onZoom(arg))
- bou14=Button(root,text="Zoom par facteur",command=onFact)
- bou10.grid(row=20,column=1)
- bou11.grid(row=20,column=2)
- bou12.grid(row=21,column=1)
- bou13.grid(row=21,column=2)
- bou14.grid(row=22,column=1)
- ent11.grid(row=22,column=2)
-
- lst1=Canvas(root,width=200,height=700)
- lst1.create_rectangle(0,20,200,700,fill="ivory",outline="ivory")
- lst1.grid(row=0,column=4,rowspan=30)
- lst1.create_text(100,10,text="Historique :")
- lst1.create_line(74,17,126,17)
- onInit()
-
- root.mainloop()
# -*- coding: cp1252 -*-
# Grapheur mathématique
# Ecrit et immaginé par Amaury
from math import *
from Tkinter import *
import tkMessageBox
ux=0
global select,h,m
save=[]
h=30
m=50
select="black"
def onInit():
global xmin,xmax,ymin,ymax,pasx,pasy,save
h=30
m=50
lst1.create_rectangle(0,20,200,700,fill="ivory",outline="ivory")
can.create_rectangle(0,0,700,700,fill="white",outline="white")
try:
xmin=float(eval(ent1.get()))
except SyntaxError:
xmin=-10
try:
xmax=float(eval(ent2.get()))
except SyntaxError:
xmax=10
try:
pasx=float(eval(ent3.get()))
except SyntaxError:
pasx=1
try:
ymin=float(eval(ent4.get()))
except SyntaxError:
ymin=-10
try:
ymax=float(eval(ent5.get()))
except SyntaxError:
ymax=10
try:
pasy=float(eval(ent6.get()))
except SyntaxError:
pasy=1
dx=float(xmax-xmin)
dy=float(ymax-ymin)
ux=700/dx
uy=700/dy
uxx=(dx/700)
#Coordonnées du O(0,0):
xo=ux*(-xmin)
yo=uy*ymax
# Axes:
can.create_line(0,yo,700,yo,fill="red")
can.create_line(xo,0,xo,700,fill="red")
i=xo
j=yo
while i>-1:
can.create_line(i,yo-2,i,yo+2,fill="red")
i=i-(ux*pasx)
while j>-1:
can.create_line(xo-2,j,xo+2,j,fill="red")
j=j-(uy*pasy)
i=xo
j=yo
while i<701:
can.create_line(i,yo-2,i,yo+2,fill="red")
i=i+(ux*pasx)
while j<701:
can.create_line(xo-2,j,xo+2,j,fill="red")
j=j+(uy*pasy)
try:
onCalc(str(ent10.get()),select,xo,yo,uy,uxx,xmin)
save=[[str(ent10.get()),select]]
lst1.create_text(m,h,text="f(x)="+str(ent10.get()),fill=select)
h=h+15
except SyntaxError:
pass
def onAdd():
global select,h,m,xmin,xmax,ymin,ymax,pasx,pasy
dx=float(xmax-xmin)
dy=float(ymax-ymin)
ux=700/dx
uy=700/dy
uxx=(dx/700)
#Coordonnées du O(0,0):
xo=ux*(-xmin)
yo=uy*ymax
# Axes:
can.create_line(0,yo,700,yo,fill="red")
can.create_line(xo,0,xo,700,fill="red")
i=xo
j=yo
while i>-1:
can.create_line(i,yo-2,i,yo+2,fill="red")
i=i-(ux*pasx)
while j>-1:
can.create_line(xo-2,j,xo+2,j,fill="red")
j=j-(uy*pasy)
i=xo
j=yo
while i<701:
can.create_line(i,yo-2,i,yo+2,fill="red")
i=i+(ux*pasx)
while j<701:
can.create_line(xo-2,j,xo+2,j,fill="red")
j=j+(uy*pasy)
try:
onCalc(str(ent10.get()),select,xo,yo,uy,uxx,xmin)
save.append([str(ent10.get()),select])
if h<690:
lst1.create_text(m,h,text="f(x)="+str(ent10.get()),fill=select)
else:
h=30
m=150
lst1.create_text(m,h,text="f(x)="+str(ent10.get()),fill=select)
h=h+15
except SyntaxError:
pass
except NameError:
onCalc(str(ent10.get()),"black",xo,yo,uy,uxx,xmin)
if h<690:
lst1.create_text(m,h,text="dy/dx("+str(ent10.get())+")",fill="black")
else:
h=30
m=125
lst1.create_text(m,h,text="dy/dx("+str(ent10.get())+")",fill="black")
h=h+15
def onCalc(fonction,couleur,xo,yo,uy,uxx,xmin):
valeurs=[]
a=0
while a<701:
x=float(xmin+(a*uxx))
try:
y=-eval (fonction)
valeurs.append([x,y])
a=a+1
except ValueError:
y=0
valeurs.append([x,y])
a=a+1
except OverflowError:
y=0
valeurs.append([x,y])
a=a+1
except ZeroDivisionError:
y=0
valeurs.append([x,y])
a=a+1
except NameError:
tkMessageBox.showerror(title="Erreur",message="""Fonction " """ + str(fonction) + """" inconnue""")
break
a=0
while a<700:
local0=valeurs[a]
local1=valeurs[a+1]
x1=a
x2=a+1
y1=int((local0[1]*uy)+yo)
y2=int((local1[1]*uy)+yo)
can.create_line(x1,y1,x2,y2,fill=couleur)
a=a+1
def onSelect(e):
global select
select=listb.get(listb.curselection())
lab.configure(text=select)
listb.configure(bg=select)
def onDerive():
global select,h,m,xmin,xmax,ymin,ymax,pasx,pasy
try:
xmin=float(eval(ent1.get()))
except SyntaxError:
xmin=-10
try:
xmax=float(eval(ent2.get()))
except SyntaxError:
xmax=10
try:
pasx=float(eval(ent3.get()))
except SyntaxError:
pasx=1
try:
ymin=float(eval(ent4.get()))
except SyntaxError:
ymin=-10
try:
ymax=float(eval(ent5.get()))
except SyntaxError:
ymax=10
try:
pasy=float(eval(ent6.get()))
except SyntaxError:
pasy=1
onDeriv(str(ent10.get()),select)
save.append(["derive",str(ent10.get()),select])
if h<690:
lst1.create_text(m,h,text="dy/dx("+str(ent10.get())+")",fill=select)
else:
h=30
m=150
lst1.create_text(m,h,text="dy/dx("+str(ent10.get())+")",fill=select)
h=h+15
def onDeriv(fonction,couleur):
global select,h,m
valeurs=[]
a=0
dx=float(xmax-xmin)
dy=float(ymax-ymin)
ux=700/dx
uy=700/dy
uxx=(dx/700)
#Coordonnées du O(0,0):
xo=ux*(-xmin)
yo=uy*ymax
i=xo
j=yo
while a<701:
x=float(xmin+(a*uxx))
try:
y=-eval (fonction)
valeurs.append([x,y])
a=a+1
except ValueError:
y=0
valeurs.append([x,y])
a=a+1
except OverflowError:
y=0
valeurs.append([x,y])
a=a+1
except ZeroDivisionError:
y=0
valeurs.append([x,y])
a=a+1
except NameError:
tkMessageBox.showerror(title="Erreur",message="""Fonction " """ + str(fonction) + """" inconnue""")
break
a=a+1
a=0
while a<350:
try:
y4=y3
except NameError:
y4=0
local0=valeurs[a]
local1=valeurs[a+1]
dy=local1[1]-local0[1]
dx=local1[0]-local0[0]
y3=dy/dx
y1=int((y4*uy)+yo)
y2=int((y3*uy)+yo)
can.create_line(2*a,y1,2*(a+1),y2,fill=couleur)
a=a+1
def onHelp():
tkMessageBox.showinfo(title="Syntaxe",message="""Syntaxe des fonctions usuelles pour Python:
notation usuelle <=> notation Python
log(x)<=> log(x,base)
ln(x) <=> log(x,exp(1))
Racine(x) <=> sqrt(x)
x^n <=> x**n
E(x) <=> int(x)
sin(x), cos(x) et tan(x) n'ont pas de syntaxe particulière""")
def onRefresh():
global save,xmin,xmax,pasx,ymin,ymax,pasy
can.create_rectangle(0,0,700,700,fill="white",outline="white")
try:
xmin=float(eval(ent1.get()))
except SyntaxError:
xmin=-10
try:
xmax=float(eval(ent2.get()))
except SyntaxError:
xmax=10
try:
pasx=float(eval(ent3.get()))
except SyntaxError:
pasx=1
try:
ymin=float(eval(ent4.get()))
except SyntaxError:
ymin=-10
try:
ymax=float(eval(ent5.get()))
except SyntaxError:
ymax=10
try:
pasy=float(eval(ent6.get()))
except SyntaxError:
pasy=1
dx=float(xmax-xmin)
dy=float(ymax-ymin)
ux=700/dx
uy=700/dy
uxx=(dx/700)
#Coordonnées du O(0,0):
xo=ux*(-xmin)
yo=uy*ymax
# Axes:
can.create_line(0,yo,700,yo,fill="red")
can.create_line(xo,0,xo,700,fill="red")
i=xo
j=yo
while i>-1:
can.create_line(i,yo-2,i,yo+2,fill="red")
i=i-(ux*pasx)
while j>-1:
can.create_line(xo-2,j,xo+2,j,fill="red")
j=j-(uy*pasy)
i=xo
j=yo
while i<701:
can.create_line(i,yo-2,i,yo+2,fill="red")
i=i+(ux*pasx)
while j<701:
can.create_line(xo-2,j,xo+2,j,fill="red")
j=j+(uy*pasy)
a=0
g=len(save)
while a<g:
local=save[a]
if len(local)==3:
onDeriv(local[1],local[2])
elif len(local)==2:
onCalc(local[0],local[1],xo,yo,uy,uxx,xmin)
a=a+1
def onZoom(facteur):
global save,xmin,xmax,pasx,ymin,ymax,pasy
try:
xmin=float(eval(ent1.get()))
except SyntaxError:
xmin=-10
try:
xmax=float(eval(ent2.get()))
except SyntaxError:
xmax=10
try:
pasx=float(eval(ent3.get()))
except SyntaxError:
pasx=1
try:
ymin=float(eval(ent4.get()))
except SyntaxError:
ymin=-10
try:
ymax=float(eval(ent5.get()))
except SyntaxError:
ymax=10
try:
pasy=float(eval(ent6.get()))
except SyntaxError:
pasy=1
xmin,xmax,ymin,ymax=xmin/facteur,xmax/facteur,ymin/facteur,ymax/facteur
can.create_rectangle(0,0,700,700,fill="white",outline="white")
dx=float(xmax-xmin)
dy=float(ymax-ymin)
ux=700/dx
uy=700/dy
uxx=(dx/700)
#Coordonnées du O(0,0):
xo=ux*(-xmin)
yo=uy*ymax
# Axes:
can.create_line(0,yo,700,yo,fill="red")
can.create_line(xo,0,xo,700,fill="red")
i=xo
j=yo
while i>-1:
can.create_line(i,yo-2,i,yo+2,fill="red")
i=i-(ux*pasx)
while j>-1:
can.create_line(xo-2,j,xo+2,j,fill="red")
j=j-(uy*pasy)
i=xo
j=yo
while i<701:
can.create_line(i,yo-2,i,yo+2,fill="red")
i=i+(ux*pasx)
while j<701:
can.create_line(xo-2,j,xo+2,j,fill="red")
j=j+(uy*pasy)
a=0
g=len(save)
while a<g:
local=save[a]
if len(local)==3:
onDeriv(local[1],local[2])
elif len(local)==2:
onCalc(local[0],local[1],xo,yo,uy,uxx,xmin)
a=a+1
def onFact():
try:
facteur=float(ent11.get())
except ValueError:
facteur=1.
onZoom(facteur)
root=Tk()
can=Canvas(width=700,height=700)
can.create_rectangle(0,0,700,700,fill="white",outline="black")
can.grid (row=0,column=0,rowspan=30)
lbl1=Label(root,text="Configuration de la fenètre de traçage:")
lbl2=Label(root,text="Xmin =")
lbl3=Label(root,text="Xmax =")
lbl4=Label(root,text="Ymin =")
lbl5=Label(root,text="Ymax =")
lbl6=Label(root,text="Pas =")
lbl7=Label(root,text="Pas =")
listb=Listbox(root)
lab=Label(root,text="_")
listb.grid(row=10,column=2,rowspan=5)
lab.grid(row=10,column=1)
# Insertion des éléments dans la liste:
for coul in ["gray", "blue", "orange", "yellow", "green", "cyan", "red", "pink", "skyblue", "gold","green"]:
listb.insert(END,coul)
# Un double click dans la liste appellera la fonction onSelect:
listb.bind('<Double-1>',onSelect)
ent1=Entry(root)
ent2=Entry(root)
ent3=Entry(root)
ent4=Entry(root)
ent5=Entry(root)
ent6=Entry(root)
bou1=Button(root,text="Nouvelle trace",command=onInit)
bou2=Button(root,text="Quitter",command=root.quit)
bou3=Button(root,text="Ajouter trace",command=onAdd)
bou4=Button(root,text="Tracer dérivée",command=onDerive)
bou5=Button(root,text="Syntaxe",command=onHelp)
bou6=Button(root,text="Rafraichir",command=onRefresh)
bou1.grid(row=28,column=1)
bou2.grid(row=29,column=2)
bou3.grid(row=27,column=1)
bou4.grid(row=27,column=2)
bou5.grid(row=29,column=1)
bou6.grid(row=28,column=2)
lbl1.grid(row=0,column=1,columnspan=2)
lbl2.grid(row=1,column=1)
lbl3.grid(row=2,column=1)
lbl4.grid(row=4,column=1)
lbl5.grid(row=5,column=1)
lbl6.grid(row=3,column=1)
lbl7.grid(row=6,column=1)
ent1.grid(row=1,column=2)
ent2.grid(row=2,column=2)
ent3.grid(row=3,column=2)
ent4.grid(row=4,column=2)
ent5.grid(row=5,column=2)
ent6.grid(row=6,column=2)
lbl10=Label(root,text="Configuration du Grapheur:")
lbl11=Label(root,text="f(x)=")
ent10=Entry(root)
lbl10.grid(row=8,column=1,columnspan=2)
lbl11.grid(row=9,column=1)
ent10.grid(row=9,column=2)
ent11=Entry(root)
bou10=Button(root,text="Zoom x2",command=lambda arg=2.:onZoom(arg))
bou11=Button(root,text="Zoom x4",command=lambda arg=4.:onZoom(arg))
bou12=Button(root,text="Zoom x0.5",command=lambda arg=0.5:onZoom(arg))
bou13=Button(root,text="Zoom x0.25",command=lambda arg=0.25:onZoom(arg))
bou14=Button(root,text="Zoom par facteur",command=onFact)
bou10.grid(row=20,column=1)
bou11.grid(row=20,column=2)
bou12.grid(row=21,column=1)
bou13.grid(row=21,column=2)
bou14.grid(row=22,column=1)
ent11.grid(row=22,column=2)
lst1=Canvas(root,width=200,height=700)
lst1.create_rectangle(0,20,200,700,fill="ivory",outline="ivory")
lst1.grid(row=0,column=4,rowspan=30)
lst1.create_text(100,10,text="Historique :")
lst1.create_line(74,17,126,17)
onInit()
root.mainloop()
Conclusion
Très pratique si un PC portable doit remplacer une calculatrice graphique.
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 23 juin 2008 20:35:07 :
- Correction du beug de changement d'échelle
- 25 juin 2008 14:21:42 :
- Un nouveau message d'erreur: "Fonction inconnue"
- 26 juin 2008 13:46:13 :
- Apporte le choix de la couleur et un nombre de traces illimité.
- 26 juin 2008 14:37:32 :
- Trace les dérivées
- 26 juin 2008 14:43:32 :
- Correction beug couleur sur nouvelle trace
- 26 juin 2008 14:56:54 :
- Ajout d'une fenetre d'aide
- 26 juin 2008 22:28:43 :
- Permet de tracer f:x=>1/x
Inclus un petit script qui permet d'utiliser le shell de python en temps que calculatrice rapidement et sans connaissances particulières (pour les néophites).
- 26 juin 2008 22:34:05 :
- edit
- 27 juin 2008 13:16:49 :
- Ajout d'un historique
- 30 juin 2008 21:57:05 :
- La modification la plus importante: l'ajout d'un zoom!!!
Pour l'instant, on peut uniquement zoomer par un facteur d'agrandissement.
A suivre, un zoom en boite...
- 30 juin 2008 22:01:42 :
- correction fonction rafraichir sur courbe dérivée
- 30 juin 2008 22:09:45 :
- edit
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Appel d'une fonction [ par Thomeux ]
Bonjour,Je débute en python.J'essais de structurer mon Programme de la manière suivante :Un fichier bibliothèque fonction, :Un Fichi
utiliser correctement les fonction, débutant niveaux 0+ dx [ par gwenc_hlan ]
voilà, en gros, ça fait une semaine que je fait du python et en totu un peu plus de dix jours que je programme. engros : je débute.bon, voilà, je suis
définir une fonction dans une fonction ? [ par gwenc_hlan ]
bonjour, voilà, je cherche à faire un petit programme à interface graphiques. cependant, j'aimerais savoir s'il est possible de définir une fonction
Délai avant d'exécuter une fonction [ par Crocandrew ]
Bonjour, j'aimerais imposer un délai avant d'effectuer une fonction (de par exemple 20 secondes) , mais je ne sais pas comment faire . . . Merci de vo
Fonction _call_func() [ par skylin3 ]
Bonjour,Je cherche des informations sur la fonction _call_func(), comment l'utiliser.Merci,A bientôt.
Probleme de conception [ par JoeNamat ]
Bonjour a vous,Je ne suis pas un tres bon programmeur et j'ai programme une interface graphique en python avec PyGTK. Cette interface graphique interr
wxWindow::RegisterHotKey [ par DoudouBidou ]
Bonjour à tous(au passage Merci pour ce site, depuis le temps que je l'attends...)J'utilise wxPython pour réaliser mon interface graphique mais je n'a
scrollbar dans scrollbox avec TKinter [ par MHI ]
Est-ce que quelqu'un sait comment ajouter les scrollbar à une scrollbox :J'ai essayé ceci :lstFile = Tkinter.Listbox(frmMain)lstFile.place(x = 20, y =
checkButton avec TKinter [ par MHI ]
comment faire pour tester si un checkButton est coché ?
probleme avec os.path.getctime() [ par Bl0tCh ]
Voilà, Donc cette fonction est censée me donner la date de creation du fichier (en secondes) mais le probleme c ke elle me donne la premiere date de c
|
Téléchargements
Logiciels à télécharger sur le même thème :
|