Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/petri_dish/rev/5cc5069458a9
Дата изменения: Unknown
Дата индексирования: Tue Oct 2 08:35:34 2012
Кодировка:
petri_dish: 5cc5069458a9

petri_dish

changeset 15:5cc5069458a9

Bacteria.py module 0.3
author Smirnova Victoria
date Wed, 15 Dec 2010 03:04:54 +0300
parents 4163852eb85b
children eec3dd65336c
files Bacteria.py
diffstat 1 files changed, 41 insertions(+), 12 deletions(-) [+]
line diff
     1.1 --- a/Bacteria.py	Tue Dec 07 22:06:14 2010 +0300
     1.2 +++ b/Bacteria.py	Wed Dec 15 03:04:54 2010 +0300
     1.3 @@ -1,4 +1,5 @@
     1.4 -from random import*
     1.5 +from random import *
     1.6 +from math import *
     1.7  
     1.8  class Bacteria (object):
     1.9      def __init__ (self, position, velocity, lifetime, mutated):
    1.10 @@ -7,17 +8,20 @@
    1.11          self.lifetime=lifetime
    1.12          self.mutated=mutated
    1.13  
    1.14 -    def check_collision (self, bacteria):
    1.15 +    def check_collision (self, bacteria, delta, bact_r):
    1.16          for bact in bacteria:
    1.17 -            if 0<abs(self.position-bact.position)<3:
    1.18 +            if 0<abs(self.position-bact.position)<delta+2*bact_r:
    1.19                  return bact
    1.20              return false
    1.21  
    1.22 -    def move (self, delta_t, radius):
    1.23 -        pass
    1.24 +    def move (self, delta_t, radius, delta, bact_r):
    1.25 +        if abs(self.position)<radius-(bact_r+delta):
    1.26 +            self.velocity=self.velocity.angleToCoord(-(pi/2-self.velocity.angle()))
    1.27 +        self.position=self.position*delta_t
    1.28  
    1.29 -    def collision (self, other, delta_t):
    1.30 -        pass
    1.31 +    def collision (self, other, delta_t, radius, delta, bact_r):
    1.32 +        self.velocity, other.velocity = other.velocity, self.velocity 
    1.33 +        self.move (delta_t, radius, delta, bact_r)
    1.34      
    1.35      def reprod (type, env, p_max):
    1.36          if type=='s':
    1.37 @@ -26,14 +30,39 @@
    1.38              p=p_max*(env/100)
    1.39          return randrange(0, int(1/p))==0    
    1.40  
    1.41 -    def asexual (self, bacteria, delta_t, radius):
    1.42 +    def asexual (self, bacteria, delta_t, radius, delta, bact_r, full_lifetime):
    1.43 +        if self.find_place_a(bacteria, delta, bact_r):
    1.44 +            bacteria.append(Bacteria(self.position+Vector(-(bact_r+0.75*delta),0),
    1.45 +                                     self.rnd_velocity(), full_lifetime, self.if_mutated()))
    1.46 +
    1.47 +    def sexual (self, other, bacteria, delta_t, radius, delta, bact_r, full_lifetime):
    1.48          pass
    1.49  
    1.50 -    def sexual (self, other, bacteria, delta_t, radius):
    1.51 +    def find_place_a (self, bacteria, delta, bact_r): #searches for place for children
    1.52 +        for bact in bacteria:
    1.53 +            if 0<abs(bact.position-self.position)<(bact_r*3+delta*2):
    1.54 +                return false
    1.55 +        return true
    1.56 +
    1.57 +            
    1.58 +    def find_place_s (self, other, bacteria, delta, bact_r):
    1.59 +        for bact in bacteria:
    1.60 +            if bact_r<abs(bact.position-(self.position+other.position)*(1/2))<((sqrt(2)+1)*bact_r*2+delta*2):
    1.61 +                return false
    1.62 +        return true
    1.63 +
    1.64 +
    1.65 +    def rnd_velocity(self):
    1.66          pass
    1.67  
    1.68 -    def find_place_a (self, bacteria): #searches for place for children
    1.69 +    def if_mutated_a(self):
    1.70 +        pass
    1.71 +
    1.72 +    def if_mutated__s(self,other):
    1.73          pass
    1.74      
    1.75 -    def find_place_s (self, other, bacteria):
    1.76 -        pass
    1.77 +
    1.78 +
    1.79 +
    1.80 +
    1.81 +