import sys sys.path.append('/Users/apollotiger/lib') from euclid import * class Particle: def __init__(self,locus=Vector2(0,750),mass=5,radius=2,color=(255,255,255),mother=False): self.radius = radius self.mass = mass self.locus = locus self.velox = Vector2(0,0) def distance(self,locus): return ((self.locus.x - locus.x) ** 2 + (self.locus.y - locus.y) ** 2) ** 0.5 size(400,400) speed(500) gravs = [] while len(gravs) < 5: gravs.append(Particle(Vector2(random(0,WIDTH),random(0,HEIGHT)),20,10)) parts = [] origin = Vector2(random(0,WIDTH),random(0,HEIGHT)) counter = 0 def setup(): global frame frame = 1 def draw(): global counter for grav in gravs: fill(0,0,0) oval(grav.locus.x,grav.locus.y,grav.radius,grav.radius) if len(parts) < 16 and counter == 0: parts.append(Particle(origin,15,3)) counter = (counter + 1) % 20 for part in parts: fill(1,0,0) oval(part.locus.x,part.locus.y,part.radius,part.radius) for grav in gravs: distance = part.distance(grav.locus) if distance < 10: distance = 10 # hax force = 0.6 * (part.mass * grav.mass) / (distance ** 2) # g = 0.3; pi = 3 acceleration = force / part.mass part.velox += acceleration * (part.locus - grav.locus) / distance part.locus -= part.velox if part.locus.x > WIDTH-part.radius: part.locus.x = WIDTH-part.radius; part.velox.x *= -1 if part.locus.x < part.radius: part.locus.x = part.radius; part.velox.x *= -1 if part.locus.y > HEIGHT-part.radius: part.locus.y = HEIGHT-part.radius; part.velox.y *= -1 if part.locus.y < part.radius: part.locus.y = part.radius; part.velox.y *= -1