Sunteți pe pagina 1din 5

#!

/usr/bin/python
#calcula datos astronomicos de un astro
from Tkinter import *
from math import*
def ayuda():
otrav3=Toplevel(root)
etiqueta11=Label(otrav3,text=" este progr pinta soluc a la edo de primer ord
en dy/dx=f(x,y) que tu quieras\n con la expansion x,y se produce zoom o redimens
ionamiento de escala de eje para ver mejor \n con las translaciones movemos ejes
hacia derecha y abajo \n (como si moviesemos el origen por la pantalla\n el pto
inicial es para empezar el dibujo y dx es el incremento de x, los limites de x
y es para cortar graf en esos limites \n (aumentar marge de botones deslizadores
iq dcha arriba abajo \n las func aceptadas son sin cos tan ceil y floor(parte e
nt de x),abs(v absol), \n exp,log,log(x) log(x,base) log10(x) pow(x,5) potenciaq
uinta,sqrt,atan asin acos, \n sinh asinh...pi,e el producto es el asterisco y la
potencia 2 asteriscos\n el numero de lineas y su separacion es para pintar vari
as soluc de valores iniciales distintos con esa separacion del inicial \n en ver
de las soluciones hacia adelante del inicial y en azul hacia atras \n puedes cam
biar cualquier casilla y el num pasos max es para cortar \n calculo si una sol o
scila infinito \n comprueba la sintaxis de tu formula o el valor inicial si te a
visa el cartel \n y revisa la sintaxis de las casillas si te avisa el cartel",fo
nt = "Helvetica 10 bold italic")
etiqueta11.pack()
return
def pintar():#ventana de dibujo
warni.delete('1.0', '4.0')
while True:
try:
c3=float(dia2.get()) #limites x e y
c4=float(hora2.get())
numl=int(num.get())
sepl=float(sep.get())
x0=float(ano2.get()) #punto inicial dibujo
y0=float(segundo2.get()) #punto inicial dibujo
expansiony=float(expyy.get()) #expansion ejes para mejor vision
expansionx=float(expxx.get())
translacionx=float(trasxx.get()) #translacion ejes para mejor vision
translaciony=float(trasyy.get())
funcion=str(ecx.get())
dx=float(minuto2.get())
paso0 = int(pas.get())
break
except ValueError:
warni.delete('1.0', '4.0')
warni.insert(END,"error sintaxis dato")
return
otrav2=Toplevel(root)
xscrollbar=Scrollbar(otrav2,orient=HORIZONTAL)
xscrollbar.pack(side=BOTTOM, fill=X)
yscrollbar=Scrollbar(otrav2, orient=VERTICAL)
yscrollbar.pack(side=RIGHT, fill=Y)
canvas =Canvas(otrav2, width=1100, height=600, cursor="cross",bg="black", sc
rollregion=(-c3, -c4, c3, c4), xscrollcommand=xscrollbar.set,yscrollcommand=yscr
ollbar.set)

canvas.pack(side="top", fill="both", expand=1)


xscrollbar.config(command=canvas.xview)
yscrollbar.config(command=canvas.yview)
x=x0
x1=x0
y=y0
y1=y0
x00,y00=x0,y0
#ejes
canvas.create_line(-c3,translaciony,c3,translaciony,fill="white")
canvas.create_line(translacionx,-c4,translacionx,c4,fill="white")
#marcas y num en ejes
canvas.create_text(translacionx-25,translaciony-10*expansiony,fill="red",tex
t="10")
canvas.create_text(translacionx-20,translaciony-5*expansiony,fill="red",text
="5")
canvas.create_text(translacionx+10*expansionx,translaciony-10,fill="red",tex
t="10")
canvas.create_text(translacionx+5*expansionx,translaciony-10,fill="red",text
="5")
canvas.create_line(translacionx-20,translaciony-10*expansiony,translacionx+2
0,translaciony-10*expansiony,fill="red") #marca del 10 vert
canvas.create_line(translacionx-10,translaciony-5*expansiony,translacionx+10
,translaciony-5*expansiony,fill="red")#marca del 5 vert
canvas.create_line(translacionx-20,translaciony+10*expansiony,translacionx+2
0,translaciony+10*expansiony,fill="red")#marca -10
canvas.create_line(translacionx-10,translaciony+5*expansiony,translacionx+10
,translaciony+5*expansiony,fill="red")#marca -5
canvas.create_line(translacionx+10*expansionx,translaciony-20,translacionx+1
0*expansionx,translaciony+20,fill="red")#marca 10 horiz
canvas.create_line(translacionx+5*expansionx,translaciony-10,translacionx+5*
expansionx,translaciony+10,fill="red")#marca 5 horiz
canvas.create_line(translacionx+100*expansionx,translaciony-20,translacionx+
100*expansionx,translaciony+20,fill="red")#marca 100 horiz
canvas.create_line(translacionx+50*expansionx,translaciony-10,translacionx+5
0*expansionx,translaciony+10,fill="red")#marca 50 horiz
canvas.create_line(translacionx-100*expansionx,translaciony-20,translacionx100*expansionx,translaciony+20,fill="red")#marca -100 horiz
canvas.create_line(translacionx-50*expansionx,translaciony-10,translacionx-5
0*expansionx,translaciony+10,fill="red")#marca -50 horiz
canvas.create_text(translacionx+100*expansionx,translaciony-10,fill="red",te
xt="100")
canvas.create_text(translacionx+50*expansionx,translaciony-10,fill="red",tex
t="50")
canvas.create_line(translacionx-10*expansionx,translaciony-20,translacionx-1
0*expansionx,translaciony+20,fill="red")#marca -10 horiz
canvas.create_line(translacionx-5*expansionx,translaciony-10,translacionx-5*
expansionx,translaciony+10,fill="red")#marca -5 horiz
canvas.create_line(translacionx-20,translaciony-100*expansiony,translacionx+
20,translaciony-100*expansiony,fill="red")#marca 100 vert
canvas.create_line(translacionx-10,translaciony-50*expansiony,translacionx+1
0,translaciony-50*expansiony,fill="red")#marca 50 vert
canvas.create_line(translacionx-20,translaciony+100*expansiony,translacionx+
20,translaciony+100*expansiony,fill="red")#marca -100 vert
canvas.create_line(translacionx-10,translaciony+50*expansiony,translacionx+1
0,translaciony+50*expansiony,fill="red")#marca -50 vert
canvas.create_text(translacionx-25,translaciony-100*expansiony,fill="red",te
xt="100")

canvas.create_text(translacionx-20,translaciony-50*expansiony,fill="red",tex
t="50")
while True:
try:
p=eval(funcion)
break
except :
warni.delete('1.0', '4.0')
warni.insert(END,"error dato inic o ecuacion") #errores ecuacion o v
alores iniciales
otrav2.destroy()
return
paso=1
for numi in range(numl):
paso=1
x0 = x00 + numi*sepl
y0 = y00 + numi*sepl
x,y = x0,y0
xback,yback=x0,y0
x1,y1 = x0,y0
while (abs(y0) < c4) and (abs(x0) < c3) and (paso != paso0) :
try :
dy0 = eval(funcion)*dx
paso += 1
y=dy0+y
x=x0+dx
canvas.create_line(x0*expansionx+translacionx,-y0*expansiony+tra
nslaciony,translacionx+x*expansionx,-y*expansiony+translaciony,fill="green")
canvas.update()
x0=x
y0=y
except :
paso = paso0
break
x,y=xback,yback
pasos = 1
while (abs(y1) < c4) and (abs(x1) < c3) and (pasos != paso0) :#lado inve
rso (hacia x decrec)
try:
dy1=eval(funcion)*dx
pasos += 1
y=y-dy1
x=x1-dx
canvas.create_line(x1*expansionx+translacionx,-y1*expansiony+tra
nslaciony,translacionx+x*expansionx,-y*expansiony+translaciony,fill="cyan")
canvas.update()
x1=x
y1=y
except : #control por si hay errores de dominio en f
pasos = paso0
break
return
root=Tk()
root.title("pintar edo")
anio22=Label(root,text="pto inicial x",bg="red")
anio22.grid(row=0,column=0)
dia22=Label(root,text="limite de las x",bg="yellow")

dia22.grid(row=0,column=2)
hora22=Label(root,text="limite de las y",bg="yellow")
hora22.grid(row=0,column=3)
minuto22=Label(root,text="longitud paso",bg="yellow")
minuto22.grid(row=0,column=4)
minuto22g=Label(root,text="numero lineas",bg="yellow")
minuto22g.grid(row=0,column=1)
global num
num=Entry(root)
num.grid(row=1,column=1)
num.insert(0,"10")
minuto22h=Label(root,text="separacion lineas",bg="yellow")
minuto22h.grid(row=2,column=4)
global sep
sep=Entry(root)
sep.grid(row=3,column=4)
sep.insert(0,"10")
segundo22=Label(root,text="pto inicial y",bg="red")
segundo22.grid(row=0,column=5)
expx=Label(root,text="expansion eje x",bg="yellow")
expx.grid(row=2,column=0)
expy=Label(root,text="expansion eje y",bg="yellow")
expy.grid(row=2,column=1)
global expxx
expxx=Entry(root)
expxx.grid(row=3,column=0)
expxx.insert(0,"10")
global expyy
expyy=Entry(root)
expyy.grid(row=3,column=1)
expyy.insert(0,"10")
trasx=Label(root,text="translacion eje x",bg="yellow")
trasx.grid(row=2,column=2)
trasy=Label(root,text="translacion eje y",bg="yellow")
trasy.grid(row=2,column=3)
global trasxx
trasxx=Entry(root)
trasxx.grid(row=3,column=2)
trasxx.insert(0,"400.0")
global trasyy
trasyy=Entry(root)
trasyy.grid(row=3,column=3)
trasyy.insert(0,"500.0")
ec=Label(root,text="edo dy/dx=f(x,y)",bg="yellow")
ec.grid(row=5,column=0)
global ecx
ecx=Entry(root)
ecx.grid(row=6,column=0)
ecx.insert(0,"y*(1-y/40)")
eopc=Label(root,text="num maximo pasos",bg="yellow")
eopc.grid(row=4,column=2)
global pas
pas=Entry(root)
pas.grid(row=5,column=2)
pas.insert(0,"500")
global ano2
ano2=Entry(root)
ano2.grid(row=1,column=0)

ano2.insert(0,"0")
global dia2
dia2=Entry(root)
dia2.grid(row=1,column=2)
dia2.insert(0,"2000")
global hora2
hora2=Entry(root)
hora2.grid(row=1,column=3)
hora2.insert(0,"2000")
global minuto2
minuto2=Entry(root)
minuto2.grid(row=1,column=4)
minuto2.insert(0,"0.1")
global segundo2
segundo2=Entry(root)
segundo2.grid(row=1,column=5)
segundo2.insert(0,"20")
global warni
warni=Text(root,bg="white",fg="red",font = "Helvetica 14 bold italic",height=3,w
idth=15)
warni.grid(row=8,column=2)
codigo=Button(root,text="dibujar", command=pintar,activebackground="#F50743",bg=
"#33CCFF",relief="raised", borderwidth=4,font = "Helvetica 10 bold italic")
codigo.grid(row=28,column=0)
ayuda=Button(root,text="ayuda", command=ayuda,activebackground="#F50743",bg="#33
CCFF",relief="raised", borderwidth=4,font = "Helvetica 10 bold italic")
ayuda.grid(row=6,column=5)
root.mainloop()

S-ar putea să vă placă și