MCPcopy Create free account
hub / github.com/ActiveState/code / Boid

Class Boid

recipes/Python/502240_Boids_Version_11/recipe-502240.py:136–201  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

134# BOID RULE IMPLEMENTATION CLASS
135
136class Boid:
137
138 def __init__(self, width, height, offset, move_divider):
139 self.velocity = TwoD(0, 0)
140 self.position = TwoD(*self.random_start(width, height, offset))
141 self.move_divider = move_divider * 5
142
143 def random_start(self, width, height, offset):
144 if random.randint(0, 1):
145 # along left and right
146 y = random.randint(1, height)
147 if random.randint(0, 1):
148 # along left
149 x = -offset
150 else:
151 # along right
152 x = width + offset
153 else:
154 # along top and bottom
155 x = random.randint(1, width)
156 if random.randint(0, 1):
157 # along top
158 y = -offset
159 else:
160 # along bottom
161 y = height + offset
162 return x, y
163
164
165 def update_velocity(self, boids):
166 v1 = self.rule1(boids)
167 v2 = self.rule2(boids)
168 v3 = self.rule3(boids)
169 self.__temp = v1 + v2 + v3
170
171 def move(self):
172 self.velocity += self.__temp
173 limit_speed(self)
174 self.position += self.velocity / self.move_divider
175
176 def rule1(self, boids):
177 # clumping
178 vector = TwoD(0, 0)
179 for boid in boids:
180 if boid is not self:
181 vector += boid.position
182 vector /= len(boids) - 1
183 return (vector - self.position) / 7.5
184
185 def rule2(self, boids):
186 # avoidance
187 vector = TwoD(0, 0)
188 for boid in boids:
189 if boid is not self:
190 if (self.position - boid.position).mag() < 30:
191 vector -= (boid.position - self.position)
192 return vector * 1.5
193

Callers 1

build_boidsFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected