DrLecter
By: a guest | Feb 9th, 2010 | Syntax:
Python | Size: 2.15 KB | Hits: 15 | Expires: Never
from tkinter import *
from math import *
def reset():
global zoom,smooth,limit
zoom=30
smooth=6
limit=360
espiral()
def zoomin():
global zoom
if zoom<100:
zoom+=10
espiral()
def zoomout():
global zoom
if zoom>10:
zoom-=10
espiral()
def smoothup():
global smooth
if smooth<10:
smooth+=1
espiral()
def smoothdown():
global smooth
if smooth>1:
smooth-=1
espiral()
def limitup():
global limit
if limit<1000:
limit+=10
espiral()
def limitdown():
global limit
if limit>10:
limit-=10
espiral()
def punto_cartesiano(x,y,x0,y0,color1,color2):
global zoom
A1=(x*zoom+250)
A2=(500-(y*zoom+250))
A3=(x0*zoom+250)
A4=(500-(y0*zoom+250))
l.create_line(A1,A2,A3,A4,fill=color1)
l.create_line(A1,A2,A1+1,A2-1,fill=color2)
def espiral():
global zoom,smooth,limit
l.delete(ALL)
l.create_line(0,250,500,250,fill="#B0B0B0")
l.create_line(250,0,250,500,fill="#A0A0A0")
l.create_text(62,12,text="Z:"+str(zoom)+",S:"+str(smooth)+",A:"+str(limit))
x0,y0,x1,y1=[0]*4
for J in range(0,limit):
rho=J/smooth
r=sqrt(rho)
s=r*-1
x,y=r*cos(rho),r*sin(rho)
x2,y2=s*cos(rho),s*sin(rho)
punto_cartesiano(x,y,x0,y0,"red","green")
punto_cartesiano(x2,y2,x1,y1,"blue","cyan")
x0,y0,x1,y1=x,y,x2,y2
#main/UI:
U = Tk()
U.title("La espiral de Fermat")
l=Canvas(U,width=500,height=500,bg="white")
l.pack()
b1=Button(U,text="Zoom +",command=zoomin)
b1.pack(side=LEFT,padx=1,pady=1)
b2=Button(U,text="Zoom -",command=zoomout)
b2.pack(side=LEFT,padx=1,pady=1)
b3=Button(U,text="Smooth +",command=smoothup)
b3.pack(side=LEFT,padx=1,pady=1)
b4=Button(U,text="Smooth -",command=smoothdown)
b4.pack(side=LEFT,padx=1,pady=1)
b5=Button(U,text="A +",command=limitup)
b5.pack(side=LEFT,padx=1,pady=1)
b6=Button(U,text="A -",command=limitdown)
b6.pack(side=LEFT,padx=1,pady=1)
b7=Button(U,text="Reset",command=reset)
b7.pack(side=LEFT,padx=1,pady=1)
b8=Button(U,text="Salir",command=exit)
b8.pack(side=LEFT,padx=1,pady=1)
reset()