def seperation(self,fish, minDistance): if len(fish) < 1: return Vector() distance = 0 numClose = 0 distsum = Vector() for boid in fish: distance = (self.pos-boid.pos).length() if distance < minDistance and distance != 0: numClose += 1 distsum += (boid.pos-self.pos).divide(distance**2) if numClose == 0: return Vector() return (-distsum.divide(numClose)).normalize()
def allign(self,fish): if len(fish) < 1: return # calculate the average velocities of the other boids avg = Vector() count = 0 for boid in fish: if(boid.pos - self.pos).length()<self.per: count+=1 avg += boid.vel if count>0: avg = avg.divide(count) # set our velocity towards the others return (avg).normalize() else: return Vector()
def cohesion(self,fish): if len(fish) < 1: return # calculate the average distances from the other boids com = Vector() count = 0 for boid in fish: if boid.pos == self.pos: continue elif (boid.pos - self.pos).length()<self.per: com += (self.pos - boid.pos) count+=1 if count>0: com = com.divide(count) return -com.normalize() else: return Vector()