import sys sys.path.append('/Users/apollotiger/lib') from euclid import * class Particle: def __init__(self,locus=Vector3(0,0,0),mass=5,radius=2,color=(255,255,255),mother=False): self.radius = radius self.mass = mass self.locus = locus self.velox = Vector3(0,0,0) def distance(self,locus): return ((self.locus.x - locus.x) ** 2 + (self.locus.y - locus.y) ** 2 + (self.locus.z - locus.z) ** 2) ** 0.5 def accel(self,force,locus): self.velox += force * (self.locus - locus) / self.distance(locus) def move(self): self.locus -= self.velox size(300,300) speed(100) def setup(): global frame,parts,gravs,origin parts = [] origin = Vector3(random(0,WIDTH),random(0,HEIGHT),random(0,HEIGHT)) gravs = [] while len(gravs) < 3: gravs.append(Particle(Vector3(random(0,WIDTH),random(0,HEIGHT),random(0,HEIGHT)),20,10)) frame = 1 def draw(): global frame,parts,gravs,origin frame += 1 if frame % 30 == 0 and len(parts) < 10: parts.append(Particle(origin,10,5)) for grav in gravs: fill(0,0,1) print grav.radius oval(grav.locus.x,grav.locus.y,grav.locus.z / (WIDTH * 1.0) * 2 * grav.radius + 2,grav.locus.z / (WIDTH * 1.0) * 2 * grav.radius + 2) for part in parts: fill(1,0,0) oval(part.locus.x,part.locus.y,part.locus.z / (WIDTH * 1.0) * 2 * part.radius + 2,part.locus.z / (WIDTH * 1.0) * 2 * part.radius + 2) 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.accel(acceleration,grav.locus) part.move() 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 if part.locus.z > HEIGHT-part.radius: part.locus.z = HEIGHT-part.radius; part.velox.z *= -1 if part.locus.z < part.radius: part.locus.z = part.radius; part.velox.z *= -1