Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.cmm.msu.ru/hg/petri_dish/annotate/15d7afe555a4/Bacteria.py
Дата изменения: Unknown
Дата индексирования: Fri Feb 28 20:34:52 2014
Кодировка:
petri_dish: Bacteria.py annotate

petri_dish

annotate Bacteria.py @ 17:15d7afe555a4

Automated merge with ssh://kodomo/petri_dish
author Daniil Alexeyevsky <me.dendik@gmail.com>
date Wed, 15 Dec 2010 15:49:24 +0300
parents 4163852eb85b
children
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