import math import random from Tkinter import * cx=250 cy=350 radius=200 pfaces=9 rotAngle=45 psize=25 pwidth=3 pcolors=['red','blue','green','yellow','magenta','cyan','orange','purple','sea green'] def poly(): angle = rotAngle * 3.14159265 / 180 angleInc = 2 * 3.14159265 /pfaces for k in range(pfaces): canvas.create_line(cx,cy,radius * math.cos(angle)+cx,radius * math.sin(angle)+cy, fill = 'gray20', tag = 'radius') canvas.create_line(radius * math.cos(angle-angleInc)+cx,radius * math.sin(angle-angleInc)+cy,radius * math.cos(angle)+cx,radius * math.sin(angle)+cy, fill = pcolors[k], tag = 'border') angle+=angleInc def paddle(n,pos): angle = rotAngle * 3.14159265 / 180 angleInc = 2 * 3.14159265 /pfaces angle += angleInc*n ax=radius * math.cos(angle-angleInc)+cx ay=radius * math.sin(angle-angleInc)+cy bx=radius * math.cos(angle)+cx by=radius * math.sin(angle)+cy canvas.create_line( ax+pos*(bx-ax)/100, ay+pos*(by-ay)/100, ax+(pos+psize)*(bx-ax)/100, ay+(pos+psize)*(by-ay)/100, width=pwidth, fill = pcolors[n], tag = 'paddle') def intersec(n): #now is useless, for debugging then angle = rotAngle * 3.14159265 / 180 angleInc = 2 * 3.14159265 /pfaces angle += angleInc*n slope=(radius * math.sin(angle)-radius * math.sin(angle-angleInc))/(radius * math.cos(angle)-radius * math.cos(angle-angleInc)) canvas.create_line(cx+radius,cy,cx-radius,cy+(-2*radius * slope), fill = pcolors[n], tag = 'trace') win = Tk() canvas = Canvas(win, width=600, height=600, background='black') canvas.pack() #debugtext angle = rotAngle * 3.14159265 / 180 angleInc = 2 * 3.14159265 /pfaces canvas.create_text(radius * math.cos(angle-angleInc)+cx-10,radius * math.sin(angle-angleInc)+cy-10, tag = 'debugtext', text = 'n=0 a', fill='blue') canvas.create_text(radius * math.cos(angle)+cx-10,radius * math.sin(angle)+cy-10, tag = 'debugtext', text = 'n=0 b', fill='blue') angle+=2*angleInc canvas.create_text(radius * math.cos(angle-angleInc)+cx-10,radius * math.sin(angle-angleInc)+cy-10, tag = 'debugtext', text = 'n=2 a', fill='blue') canvas.create_text(radius * math.cos(angle)+cx-10,radius * math.sin(angle)+cy-10, tag = 'debugtext', text = 'n=2 b', fill='blue') #debugtext end poly() paddle(0,50) paddle(1,50) paddle(2,50) paddle(3,50) paddle(4,50) paddle(5,50) bsize=5 bspeed=3 bangle=2 * 3.14159265 * random.random() bangle=2 * 3.14159265 * 0.09 bx=math.cos(bangle)*bspeed by=math.sin(bangle)*bspeed canvas.create_line(cx,cy,2* radius * math.cos(bangle)+cx,2* radius * math.sin(bangle)+cy, fill = 'brown', tag = 'trace') canvas.create_oval(cx-bsize/2, cy-bsize/2, cx+bsize/2, cy+bsize/2, fill = 'firebrick', tag = 'ball') #eq traj eq y=by/bx *x #eq traj eq y=math.tan(bangle) *x canvas.create_line(cx,cy,cx+radius,cy+radius * math.tan(bangle), fill = 'chocolate', tag = 'trace') sloa=math.tan(bangle) inta=cy+radius * math.tan(bangle)-sloa*(cx+radius) n=0 angle = rotAngle * 3.14159265 / 180 angleInc = 2 * 3.14159265 /pfaces angle += angleInc*n slob=(radius * math.sin(angle)-radius * math.sin(angle-angleInc))/(radius * math.cos(angle)-radius * math.cos(angle-angleInc)) intb=cy-slob*(cx+radius) #canvas.create_line(0,intb,600,slob*600+intb, fill = 'pink', tag = 'trace', width=5) xx=(intb-inta)/(sloa-slob) yy=intb+xx*slob xxx=xx yyy=yy canvas.create_oval(xx-bsize, yy-bsize, xx+bsize, yy+bsize, fill = 'red', tag = 'ball2') #so far so good!!! sloa=1/sloa inta=yy-sloa*(xx) canvas.create_line(xx,yy,xx-300,yy-300*sloa, fill = 'chocolate', tag = 'trace') #canvas.create_line(0,inta,600,sloa*600+inta, fill = 'pink', tag = 'trace', width=5) n=6 angle = rotAngle * 3.14159265 / 180 angleInc = 2 * 3.14159265 /pfaces angle += angleInc*n slob=(radius * math.sin(angle)-radius * math.sin(angle-angleInc))/(radius * math.cos(angle)-radius * math.cos(angle-angleInc)) intb=((radius * math.sin(angle)+cy))-slob*(radius * math.cos(angle)+cx) #canvas.create_line(0,intb,600,slob*600+intb, fill = 'pink', tag = 'trace', width=5) #canvas.create_line(0,yy,600,yy, fill = 'pink', tag = 'trace', width=1) #canvas.create_line(xx,0,xx,600, fill = 'pink', tag = 'trace', width=1) xx=(intb-inta)/(sloa-slob) yy=intb+xx*slob canvas.create_oval(xx-bsize, yy-bsize, xx+bsize, yy+bsize, fill = 'red', tag = 'ball2') #so far so good!!! sloa=-1*sloa inta=yy-sloa*(xx) canvas.create_line(xx,yy,xx-300,yy-300*sloa, fill = 'chocolate', tag = 'trace') #canvas.create_line(0,inta,600,sloa*600+inta, fill = 'pink', tag = 'trace', width=5) n=3 angle = rotAngle * 3.14159265 / 180 angleInc = 2 * 3.14159265 /pfaces angle += angleInc*n slob=(radius * math.sin(angle)-radius * math.sin(angle-angleInc))/(radius * math.cos(angle)-radius * math.cos(angle-angleInc)) intb=((radius * math.sin(angle)+cy))-slob*(radius * math.cos(angle)+cx) #canvas.create_line(0,intb,600,slob*600+intb, fill = 'pink', tag = 'trace', width=5) #canvas.create_line(0,yy,600,yy, fill = 'pink', tag = 'trace', width=1) #canvas.create_line(xx,0,xx,600, fill = 'pink', tag = 'trace', width=1) xx=(intb-inta)/(sloa-slob) yy=intb+xx*slob canvas.create_oval(xx-bsize, yy-bsize, xx+bsize, yy+bsize, fill = 'red', tag = 'ball2') sloa=sloa/3 inta=yy-sloa*(xx) canvas.create_line(xx,yy,xx+500,yy+500*sloa, fill = 'chocolate', tag = 'trace') #canvas.create_line(0,inta,600,sloa*600+inta, fill = 'pink', tag = 'trace', width=5) n=7 angle = rotAngle * 3.14159265 / 180 angleInc = 2 * 3.14159265 /pfaces angle += angleInc*n slob=(radius * math.sin(angle)-radius * math.sin(angle-angleInc))/(radius * math.cos(angle)-radius * math.cos(angle-angleInc)) intb=((radius * math.sin(angle)+cy))-slob*(radius * math.cos(angle)+cx) #canvas.create_line(0,intb,600,slob*600+intb, fill = 'pink', tag = 'trace', width=5) #canvas.create_line(0,yy,600,yy, fill = 'pink', tag = 'trace', width=1) #canvas.create_line(xx,0,xx,600, fill = 'pink', tag = 'trace', width=1) xx=(intb-inta)/(sloa-slob) yy=intb+xx*slob canvas.create_oval(xx-bsize, yy-bsize, xx+bsize, yy+bsize, fill = 'red', tag = 'ball2') # # # # # # #v1 = v - 2 * (v(dot)n) * n bsize=5 bspeed=3 bangle=2 * 3.14159265 * random.random() bangle=2 * 3.14159265 * 0.09 bx=math.cos(bangle)*bspeed by=math.sin(bangle)*bspeed #canvas.create_line(cx,cy,2* radius * math.cos(bangle)+cx,2* radius * math.sin(bangle)+cy, fill = 'PeachPuff3', tag = 'trace') n=0 angle = rotAngle * 3.14159265 / 180 angleInc = 2 * 3.14159265 /pfaces angle += angleInc*n slob=(radius * math.sin(angle)-radius * math.sin(angle-angleInc))/(radius * math.cos(angle)-radius * math.cos(angle-angleInc)) intb=cy-slob*(cx+radius) bangle=bangle+3.14159265+(2 * 3.14159265 /pfaces) canvas.create_line(xxx,yyy,2* radius * math.cos(bangle)+xxx,2* radius * math.sin(bangle)+yyy, fill = 'PeachPuff3', tag = 'trace') for k in range(100): canvas.move('ball', bx, by) canvas.update() canvas.after(40) #canvas.delete('win') # #for k in range(90): # poly() win.mainloop()