Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.cmm.msu.ru/hg/petri_dish/raw-annotate/02609649d88b/tk1.py
Дата изменения: Unknown
Дата индексирования: Fri Feb 11 10:29:54 2011
Кодировка:

Поисковые слова: m 2

ksenia_yashina@0: import Tkinter
ksenia_yashina@0: import time
ksenia_yashina@0: from math import *
ksenia_yashina@0: import random
ksenia_yashina@0:
ksenia_yashina@0: class Vector(object):
ksenia_yashina@0: def __init__(self,x,y):
ksenia_yashina@0: self.x=x
ksenia_yashina@0: self.y=y
ksenia_yashina@0: def __abs__(self):
ksenia_yashina@0: return sqrt(self.x**2+self.y**2)
ksenia_yashina@0: def __add__(self,other):
ksenia_yashina@0: return Vector(self.x+other.x,self.y+other.y)
ksenia_yashina@0: def __mul__(self,digit):
ksenia_yashina@0: return Vector(digit*self.x,digit*self.y)
ksenia_yashina@0: def angle(self):
ksenia_yashina@0: if self.x==0:
ksenia_yashina@0: if self.y>0:
ksenia_yashina@0: return -pi/2
ksenia_yashina@0: else:
ksenia_yashina@0: return pi/2
ksenia_yashina@0: if self.y==0:
ksenia_yashina@0: if self.x>0:
ksenia_yashina@0: return 0
ksenia_yashina@0: else:
ksenia_yashina@0: return pi
ksenia_yashina@0: m=abs(self)
ksenia_yashina@0: if acos(self.x/m)>pi/2 or (acos(self.x/m)>pi/2 and asin(self.y/m)<0):
ksenia_yashina@0: return atan(self.y/self.x)-pi
ksenia_yashina@0: else:
ksenia_yashina@0: return atan(self.y/self.x)
ksenia_yashina@0: def angleToCoord(self,angle):
ksenia_yashina@0: magn=abs(self)
ksenia_yashina@0: self.x=magn*cos(angle)
ksenia_yashina@0: self.y=magn*sin(angle)
ksenia_yashina@0: return self
ksenia_yashina@0: def magnitToCoord(self,m):
ksenia_yashina@0: ang=self.angle()
ksenia_yashina@0: self.x=m*cos(ang)
ksenia_yashina@0: self.y=m*sin(ang)
ksenia_yashina@0: return self
ksenia_yashina@0:
ksenia_yashina@0: class Ball(object):
ksenia_yashina@0: def __init__(self,position,velocity):
ksenia_yashina@0: self.position=position
ksenia_yashina@0: self.velocity=velocity
ksenia_yashina@0: def bounds(self):
ksenia_yashina@0: if self.position.x>=595:
ksenia_yashina@0: self.position.x=595
ksenia_yashina@0: self.velocity=self.velocity.angleToCoord(pi-self.velocity.angle())
ksenia_yashina@0: elif self.position.x<=2:
ksenia_yashina@0: self.position.x=2
ksenia_yashina@0: self.velocity=self.velocity.angleToCoord(pi-self.velocity.angle())
ksenia_yashina@0: if self.position.y>=595:
ksenia_yashina@0: self.position.y=595
ksenia_yashina@0: self.velocity=self.velocity.angleToCoord(-self.velocity.angle())
ksenia_yashina@0: elif self.position.y<=2:
ksenia_yashina@0: self.position.y=2
ksenia_yashina@0: self.velocity=self.velocity.angleToCoord(-self.velocity.angle())
ksenia_yashina@0: def collision(self,other):
ksenia_yashina@0: if abs(self.position.y-other.position.y)<70 and abs(self.position.x-other.position.x)<70:
ksenia_yashina@0: self.velocity.angleToCoord(2*pi*random.random())
ksenia_yashina@0: other.velocity.angleToCoord(2*pi*random.random())
ksenia_yashina@0: root = Tkinter.Tk()
ksenia_yashina@0: c = Tkinter.Canvas( root, width = 670, height = 670 )
ksenia_yashina@0: c.pack()
ksenia_yashina@0:
ksenia_yashina@0: b1=Ball(Vector(440,100),Vector(5,7))
ksenia_yashina@0: b2=Ball(Vector(40,90),Vector(-3,-1))
ksenia_yashina@0: b3=Ball(Vector(100,250),Vector(0,5))
ksenia_yashina@0: b4=Ball(Vector(150,250),Vector(-1,2))
ksenia_yashina@0: ball1 = c.create_oval(0,0,0,0)
ksenia_yashina@0: ball2 = c.create_oval(0,0,0,0)
ksenia_yashina@0: ball3 = c.create_oval(0,0,0,0)
ksenia_yashina@0: ball4 = c.create_oval(0,0,0,0)
ksenia_yashina@0: while True:
ksenia_yashina@0: time.sleep( 0.02 )
ksenia_yashina@0: c.delete(ball1)
ksenia_yashina@0: c.delete(ball2)
ksenia_yashina@0: c.delete(ball3)
ksenia_yashina@0: c.delete(ball4)
ksenia_yashina@0: ball1=c.create_oval(b1.position.x, b1.position.y, b1.position.x+75, b1.position.y+75,fill="blue" )
ksenia_yashina@0: ball2=c.create_oval(b2.position.x, b2.position.y, b2.position.x+75, b2.position.y+75,fill="red")
ksenia_yashina@0: ball3=c.create_oval(b3.position.x, b3.position.y, b3.position.x+75, b3.position.y+75,fill="yellow")
ksenia_yashina@0: ball4=c.create_oval(b4.position.x, b4.position.y, b4.position.x+75, b4.position.y+75,fill="green")
ksenia_yashina@0: b1.bounds()
ksenia_yashina@0: b2.bounds()
ksenia_yashina@0: b3.bounds()
ksenia_yashina@0: b4.bounds()
ksenia_yashina@0: b1.collision(b2)
ksenia_yashina@0: b2.collision(b3)
ksenia_yashina@0: b1.collision(b3)
ksenia_yashina@0: b1.collision(b4)
ksenia_yashina@0: b3.collision(b4)
ksenia_yashina@0: b2.collision(b4)
ksenia_yashina@0: b1.position = b1.position+b1.velocity
ksenia_yashina@0: b2.position = b2.position+b2.velocity
ksenia_yashina@0: b3.position = b3.position+b3.velocity
ksenia_yashina@0: b4.position = b4.position+b4.velocity
ksenia_yashina@0: c.update()