rev |
line source |
Smirnova@15
|
1 from random import * |
Smirnova@15
|
2 from math import * |
Smirnova@2
|
3 |
Smirnova@2
|
4 class Bacteria (object): |
Smirnova@2
|
5 def __init__ (self, position, velocity, lifetime, mutated): |
Smirnova@2
|
6 self.position=position |
Smirnova@2
|
7 self.velocity=velocity |
Smirnova@2
|
8 self.lifetime=lifetime |
Smirnova@2
|
9 self.mutated=mutated |
Smirnova@2
|
10 |
Smirnova@15
|
11 def check_collision (self, bacteria, delta, bact_r): |
Smirnova@2
|
12 for bact in bacteria: |
Smirnova@15
|
13 if 0<abs(self.position-bact.position)<delta+2*bact_r: |
Smirnova@2
|
14 return bact |
Smirnova@2
|
15 return false |
Smirnova@7
|
16 |
Smirnova@15
|
17 def move (self, delta_t, radius, delta, bact_r): |
Smirnova@15
|
18 if abs(self.position)<radius-(bact_r+delta): |
Smirnova@15
|
19 self.velocity=self.velocity.angleToCoord(-(pi/2-self.velocity.angle())) |
Smirnova@15
|
20 self.position=self.position*delta_t |
Smirnova@7
|
21 |
Smirnova@15
|
22 def collision (self, other, delta_t, radius, delta, bact_r): |
Smirnova@15
|
23 self.velocity, other.velocity = other.velocity, self.velocity |
Smirnova@15
|
24 self.move (delta_t, radius, delta, bact_r) |
Smirnova@7
|
25 |
Smirnova@2
|
26 def reprod (type, env, p_max): |
Smirnova@2
|
27 if type=='s': |
Smirnova@2
|
28 p=1-p_max*(env/100) |
Smirnova@2
|
29 else: |
Smirnova@2
|
30 p=p_max*(env/100) |
Smirnova@2
|
31 return randrange(0, int(1/p))==0 |
Smirnova@2
|
32 |
Smirnova@15
|
33 def asexual (self, bacteria, delta_t, radius, delta, bact_r, full_lifetime): |
Smirnova@15
|
34 if self.find_place_a(bacteria, delta, bact_r): |
Smirnova@15
|
35 bacteria.append(Bacteria(self.position+Vector(-(bact_r+0.75*delta),0), |
Smirnova@15
|
36 self.rnd_velocity(), full_lifetime, self.if_mutated())) |
Smirnova@15
|
37 |
Smirnova@15
|
38 def sexual (self, other, bacteria, delta_t, radius, delta, bact_r, full_lifetime): |
Smirnova@4
|
39 pass |
Smirnova@4
|
40 |
Smirnova@15
|
41 def find_place_a (self, bacteria, delta, bact_r): #searches for place for children |
Smirnova@15
|
42 for bact in bacteria: |
Smirnova@15
|
43 if 0<abs(bact.position-self.position)<(bact_r*3+delta*2): |
Smirnova@15
|
44 return false |
Smirnova@15
|
45 return true |
Smirnova@15
|
46 |
Smirnova@15
|
47 |
Smirnova@15
|
48 def find_place_s (self, other, bacteria, delta, bact_r): |
Smirnova@15
|
49 for bact in bacteria: |
Smirnova@15
|
50 if bact_r<abs(bact.position-(self.position+other.position)*(1/2))<((sqrt(2)+1)*bact_r*2+delta*2): |
Smirnova@15
|
51 return false |
Smirnova@15
|
52 return true |
Smirnova@15
|
53 |
Smirnova@15
|
54 |
Smirnova@15
|
55 def rnd_velocity(self): |
Smirnova@4
|
56 pass |
Smirnova@4
|
57 |
Smirnova@15
|
58 def if_mutated_a(self): |
Smirnova@15
|
59 pass |
Smirnova@15
|
60 |
Smirnova@15
|
61 def if_mutated__s(self,other): |
Smirnova@4
|
62 pass |
Smirnova@4
|
63 |
Smirnova@15
|
64 |
Smirnova@15
|
65 |
Smirnova@15
|
66 |
Smirnova@15
|
67 |
Smirnova@15
|
68 |