Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ îðèãèíàëüíîãî äîêóìåíòà : http://kodomo.cmm.msu.su/trac/petri_dish/browser/bacteria.py?order=date
Äàòà èçìåíåíèÿ: Unknown
Äàòà èíäåêñèðîâàíèÿ: Mon Apr 11 01:53:25 2016
Êîäèðîâêà: IBM-866
bacteria.py òÀÓ Petri Dish

source: bacteria.py @ 22:69a4724e7cac

Revision 22:69a4724e7cac, 5.2 KB checked in by Yashina Ksenia <ksenia_yashina@òÀæ>, 5 years ago (diff)

added help and statistics

Lineˆà
1importˆàrandom
2fromˆàmathˆàimportˆà*
3importˆàvector
4
5classˆàBacteriaˆà(object):
6ˆà ˆà defˆà__init__(self,ˆàposition,ˆàvelocity,ˆàlifetime,ˆàmutated):
7ˆà ˆà ˆà ˆà self.position =ˆàposition
8ˆà ˆà ˆà ˆà self.velocity =ˆàvelocity
9ˆà ˆà ˆà ˆà self.lifetime =ˆàlifetime
10ˆà ˆà ˆà ˆà self.mutated =ˆàmutated
11
12ˆà ˆà defˆà__eq__(self,other):
13ˆà ˆà ˆà ˆà ifˆàself.position==other.position and\
14ˆà ˆà ˆà ˆà ˆà ˆàself.velocity==other.velocity and\
15ˆà ˆà ˆà ˆà ˆà ˆàself.lifetime==other.lifetime and\
16ˆà ˆà ˆà ˆà ˆà ˆàself.mutated==other.mutated:
17ˆà ˆà ˆà ˆà ˆà ˆà returnˆàTrue
18ˆà ˆà ˆà ˆà returnˆàFalse
19
20ˆà ˆà defˆà__ne__(self,other):
21ˆà ˆà ˆà ˆà returnˆànot(self==other)
22
23ˆà ˆà defˆàcheck_collision(self,ˆàbacteria,ˆàdelta,ˆàbact_r,delta_t):
24ˆà ˆà ˆà ˆà forˆàbact inˆàbacteria:
25ˆà ˆà ˆà ˆà ˆà ˆà ifˆà0ˆà<ˆàabs(self.position -ˆàbact.position)ˆà<ˆàdelta +ˆà2*bact_r:
26ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà returnˆàbact
27ˆà ˆà ˆà ˆà returnˆàFalse
28
29ˆà ˆà defˆàcheck_dish_wall(self,position,radius,delta,bact_r):
30ˆà ˆà ˆà ˆà ifˆàabs(position)ˆà>ˆàradius -ˆà(bact_r +ˆàdelta):
31ˆà ˆà ˆà ˆà ˆà ˆà returnˆàTrue
32ˆà ˆà ˆà ˆà returnˆàFalse
33
34ˆà ˆà defˆàmove(self,ˆàbacteria,ˆàdelta_t,ˆàradius,ˆàdelta,ˆàbact_r):
35ˆà ˆà ˆà ˆà ifˆàself.check_dish_wall(self.position,radius,delta,bact_r):
36ˆà ˆà ˆà ˆà ˆà ˆà self.velocity =ˆàself.velocity.angleToCoord(-(pi/2ˆà-
37ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàself.velocity.angle()))
38ˆà ˆà ˆà ˆà self.position +=ˆàself.velocity*delta_t
39
40ˆà ˆà defˆàcollision(self,ˆàother,ˆàbacteria,ˆàdelta_t,ˆàradius,ˆàdelta,ˆàbact_r):
41ˆà ˆà ˆà ˆà self.velocity,ˆàother.velocity =ˆàother.velocity,ˆàself.velocity
42ˆà ˆà ˆà ˆà self.move(bacteria,ˆàdelta_t,ˆàradius,ˆàdelta,ˆàbact_r)
43ˆà ˆà ˆà ˆà other.move(bacteria,ˆàdelta_t,ˆàradius,ˆàdelta,ˆàbact_r)
44ˆà ˆà
45ˆà ˆà defˆàreprod(self,ˆàtype,ˆàenv,ˆàp_max):
46ˆà ˆà ˆà ˆà ifˆàtypeˆà==ˆà's':
47ˆà ˆà ˆà ˆà ˆà ˆà prob =ˆà1ˆà-ˆàp_max*(env/100)
48ˆà ˆà ˆà ˆà else:
49ˆà ˆà ˆà ˆà ˆà ˆà prob =ˆà0.001
50ˆà ˆà ˆà ˆà returnˆàrandom.random()ˆà<ˆàprobˆà ˆà
51
52ˆà ˆà defˆàasexual(self,ˆàbacteria,ˆàdelta_t,ˆàradius,ˆàdelta,ˆàbact_r,ˆàfull_lifetime):
53ˆà ˆà ˆà ˆà ifˆàself.find_place_a(bacteria,ˆàdelta,ˆàbact_r)\
54ˆà ˆà ˆà ˆà ˆà ˆàandˆànot(self.check_dish_wall(self.position,radius,delta,3*bact_r)):
55ˆà ˆà ˆà ˆà ˆà ˆà pos1=self.position +ˆàvector.Vector(-(bact_r +ˆà0.75*delta),0)
56ˆà ˆà ˆà ˆà ˆà ˆà vel1=vector.Vector(1,0).angleToCoord(self.velocity.angle())
57ˆà ˆà ˆà ˆà ˆà ˆà bacteria.append(Bacteria(pos1,ˆàself.rnd_velocity(pi),
58ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàfull_lifetime,ˆàself.if_mutated_a()))
59ˆà ˆà ˆà ˆà ˆà ˆà pos2=self.position +ˆàvector.Vector((bact_r +ˆà0.75*delta),0)
60ˆà ˆà ˆà ˆà ˆà ˆà bacteria.append(Bacteria(pos2,ˆàself.rnd_velocity(0),
61ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàfull_lifetime,ˆàself.if_mutated_a()))
62ˆà ˆà ˆà ˆà ˆà ˆà bacteria.remove(self)
63ˆà ˆà ˆà ˆà ˆà ˆà returnˆà1
64ˆà ˆà ˆà ˆà returnˆà0
65
66
67ˆà ˆà defˆàsexualˆà(self,ˆàother,ˆàbacteria,ˆàdelta_t,ˆàradius,ˆàdelta,ˆàbact_r,
68ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà full_lifetime):
69ˆà ˆà ˆà ˆà num_of_mut=1
70ˆà ˆà ˆà ˆà center =ˆà(self.position+other.position)*0.5
71ˆà ˆà ˆà ˆà ifˆàself.find_place_s(other,ˆàbacteria,ˆàdelta,ˆàbact_r)ˆàand\
72ˆà ˆà ˆà ˆà ˆà ˆànot(self.check_dish_wall(center,radius,delta,bact_r*3)):
73ˆà ˆà ˆà ˆà ˆà ˆà bacteria.append(Bacteria(center +
74ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàvector.Vector(-(bact_r*sqrt(2)ˆà+ˆà0.75*delta),0),
75ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàself.rnd_velocity(pi),ˆàfull_lifetime,
76ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàself.if_mutated_s(other,num_of_mut)))
77ˆà ˆà ˆà ˆà ˆà ˆà bacteria.append(Bacteria(center +
78ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàvector.Vector((bact_r*sqrt(2)ˆà+ˆà0.75*delta),0),
79ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàself.rnd_velocity(0),ˆàfull_lifetime,
80ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàself.if_mutated_s(other,num_of_mut)))
81ˆà ˆà ˆà ˆà ˆà ˆà bacteria.append(Bacteria(center +
82ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàvector.Vector(0,ˆà-(bact_r*sqrt(2)ˆà+ˆà0.75*delta)),
83ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàself.rnd_velocity(3*pi/2),ˆàfull_lifetime,
84ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàself.if_mutated_s(other,num_of_mut)))
85ˆà ˆà ˆà ˆà ˆà ˆà bacteria.append(Bacteria(center +
86ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàvector.Vector(0,ˆà(bact_r*sqrt(2)ˆà+ˆà0.75*delta)),
87ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàself.rnd_velocity(pi/2),ˆàfull_lifetime,
88ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆàself.if_mutated_s(other,num_of_mut)))
89ˆà ˆà ˆà ˆà ˆà ˆà bacteria.remove(other)
90ˆà ˆà ˆà ˆà ˆà ˆà bacteria.remove(self)
91ˆà ˆà ˆà ˆà ˆà ˆà returnˆànum_of_mut
92ˆà ˆà ˆà ˆà else:
93ˆà ˆà ˆà ˆà ˆà ˆà self.collision(other,bacteria,delta_t,radius,delta,bact_r)
94ˆà ˆà ˆà ˆà ˆà ˆà returnˆà0
95
96ˆà ˆà defˆàfind_place_a(self,ˆàbacteria,ˆàdelta,ˆàbact_r):ˆà#searches for place for children
97ˆà ˆà ˆà ˆà forˆàbact inˆàbacteria:
98ˆà ˆà ˆà ˆà ˆà ˆà ifˆà0ˆà<ˆàabs(bact.position -ˆàself.position)ˆà<ˆà(bact_r*3ˆà+ˆàdelta*2):
99ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà returnˆàFalse
100ˆà ˆà ˆà ˆà returnˆàTrue
101
102ˆà ˆà ˆà ˆà ˆà ˆà
103ˆà ˆà defˆàfind_place_s(self,ˆàother,ˆàbacteria,ˆàdelta,ˆàbact_r):
104ˆà ˆà ˆà ˆà forˆàbact inˆàbacteria:
105ˆà ˆà ˆà ˆà ˆà ˆà ifˆàbact!=selfˆàandˆàbact!=other:
106ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆà0ˆà<ˆàabs(bact.position -ˆà(self.position +ˆàother.position)*0.5)\
107ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà<ˆà((sqrt(2)ˆà+ˆà1)*bact_r*2ˆà+ˆàdelta*2):
108ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà returnˆàFalse
109ˆà ˆà ˆà ˆà returnˆàTrue
110
111
112ˆà ˆà defˆàrnd_velocity(self,angle):
113ˆà ˆà ˆà ˆà vel=vector.Vector(1,0)
114ˆà ˆà ˆà ˆà returnˆàvel.angleToCoord(angle +ˆàpi*random.randrange(-4,5)/16)
115
116ˆà ˆà defˆàif_mutated_a(self):
117ˆà ˆà ˆà ˆà returnˆàself.mutated
118
119ˆà ˆà defˆàif_mutated_s(self,other,n):
120ˆà ˆà ˆà ˆà ifˆàself.mutated==Falseˆàandˆàother.mutated ==ˆàFalse:
121ˆà ˆà ˆà ˆà ˆà ˆà returnˆàFalse
122ˆà ˆà ˆà ˆà r =ˆà(random.randint(0,ˆà3)ˆà==ˆà0)
123ˆà ˆà ˆà ˆà ifˆàr:
124ˆà ˆà ˆà ˆà ˆà ˆà n+=1
125ˆà ˆà ˆà ˆà returnˆàr
Note: See TracBrowser for help on using the repository browser.