Colonie de bactéries dans une assiette de Petri Compléments Mathématiques Jamila Sam, Corentin Perret & Roger Küng version 1.2 ( Octobre 2012) c EPFL 2012 2013 Table des matières 1 Rappel du cadre du projet 2 2 Simulation du déplacement 2 3 Méthodes d intégration numérique 2 3.1 Schéma d Euler-Cromer........................... 4 3.2 Runge-Kutta d ordre 4............................ 4 4 Tests de collision 5 4.1 Test de collision avec l assiette de Petri................... 5 4.2 Test de collision d un point avec une boîte.................. 5 4.3 Test de collision d un point avec une sphère................. 6 4.4 Test de collision d un point avec un plan................... 6 4.4.1 Plan infini............................... 6 4.4.2 Portion de plan............................ 6 5 Représentations graphiques 7 1
1 Rappel du cadre du projet Ce projet a pour but de construire un outil informatique permettant de visualiser et simuler de façon simplifiée l évolution de colonies de bactéries dans une assiette de Petri. Pour plus de détails sur le cadre général du projet lui-même, référez-vous à la page Web de description de celui-ci. Le présent document à pour seul but de vous fournir les compléments théoriques, notamment mathématiques, nécessaires à la mise en oeuvre du programme. 2 Simulation du déplacement Nous considérons dans le cadre de ce projet que le mouvement d une bactérie est régi par une équation de type : d v(t) = f( v(t), x(t)) (1) dt où f est une force s exerçant sur la bactérie et conditionnant son mouvement : par exemple une force d attraction dépendant de la position, x(t), de la bactérie et de sa vitesse, v(t), au moment t. Calculer les vitesse et position de la bactérie, conditionnés par f, après l écoulement d un certain temps, revient en fait à résoudre une équation différentielle du second ordre du type : ẍ = f(x, ẋ, t) où x R q est un vecteur (position), ẍ = d2 x dt, ẋ = dx (vitesse) et f est une fonction 2 dt vectorielle de R R q R q dans R q. Nous le ferons moyennant un intégrateur numérique (voir la section?? ci-dessous) qui nous permettra de calculer pas à pas l évolution du mouvement d une bactérie. 3 Méthodes d intégration numérique Peu d équations différentielles possèdent une solution calculable analytiquement. Pour les résoudre, il faut alors passer par l analyse numérique, c est-à-dire le calcul approché, numérique, d une solution particulière à l équation différentielle pour des conditions initiales données. On parle d «intégration numérique». Il existe de nombreux moyens d intégrer numériquement une équation différentielle (cf plus loin). Le moyen le plus simple, dont nous allons nous servir ici pour illustrer les principes, 2
est la méthode dite «d Euler». Imaginons que nous ayons une équation différentielle que l on peut écrire sous la forme : ẍ = f(x, ẋ, t) où x R q est un vecteur (typiquement la position), ẍ = d2 x dt, ẋ = dx et f est une 2 dt fonction vectorielle de R R q R q dans R q (qui en représente typiquement les équations du mouvement). Imaginons également que nous connaissions des conditions initiales i.e. les valeurs x(t 0 ) et ẋ(t 0 ) de x et ẋ au temps T 0. On peut alors utiliser un développement limité au premier ordre pour trouver la valeur de x à un temps t + t : x(t 0 + t) = x(t 0 ) + ẋ(t 0 ) t Par le même raisonnement, on peut écrire pour la dérivée : ẋ(t 0 + t) = ẋ(t 0 ) + ẍ(t 0 ) t = ẋ(t 0 ) + f(x(t 0 ), ẋ(t 0 ), T 0 ) t On peut alors, ainsi de suite, de proche en proche, déterminer de cette manière la valeur de x (la position) et ẋ (la vitesse) pour tout temps t de la forme T 0 + n t. Il suffit pour cela de connaître les conditions initiales x(0), ẋ(0) et la fonction f(x, ẋ, t) puis de faire une boucle sur les calculs précédents en avançant à chaque fois de t. Il est ainsi par exemple possible de déterminer la position et la vitesse d un système pour n importe quel temps T 0 + n t en utilisant l intégrateur d Euler, non pas en calculant directement la solution de l équation, mais en faisant des «petits sauts» pour approcher cette solution. La méthode passe par l utilisation d un «pas de temps» t. Il faut le choisir suffisamment petit pour que l approximation faite dans le développement limité soit «raisonnable». Ceci peut faire l objet de nombreuses études qui seront le sujet de vos cours d analyse numérique. Dans notre cas, un choix de 0.03 secondes semble suffisant. Dans ce projet, de façon générale on cherche donc à résoudre (numériquement) une équation différentielle du second ordre : ẍ = f(x, ẋ, t) (x R q, q vaudra 3 dans notre projet : monde 3D) c est-à-dire, partant de conditions initiales (x (0), ẋ (0) ) au temps T 0, calculer les valeurs x (n) et ẋ (n) ) de x et ẋ au temps T n = T 0 + n t (pour un pas de temps t donné et n 1). Il existe pour cela plusieurs méthodes différentes. En voici deux, de la plus simple à la plus compliquée. 3
3.1 Schéma d Euler-Cromer Calculer x (n) et ẋ (n) comme suit : ẋ (n) = ẋ (n 1) + t f(t n 1, x (n 1), ẋ (n 1) ) x (n) = x (n 1) + t ẋ (n) À noter la différence avec le schéma d Euler (explicite) classique qui utilise l ancienne version ẋ (n 1) de la vitesse dans la seconde équation. 3.2 Runge-Kutta d ordre 4 Cette méthode, plus fiable que la précédente, nécessite huit variables intermédiaires : k 1, k 2, k 3, k 4, k 1, k 2, k 3 et k 4. avec : x (n) = x (n 1) + t 6 (k 1 + 2k 2 + 2k 3 + k 4 ) ẋ (n) = ẋ (n 1) + t 6 (k 1 + 2k 2 + 2k 3 + k 4) k 1 = ẋ (n 1) k 1 = f(t n 1, x (n 1), ẋ (n 1) ) k 2 = ẋ (n 1) + t 2 k 1 k 2 = f(t n 1 + t 2, x(n 1) + t 2 k 1, ẋ (n 1) + t 2 k 1) k 3 = ẋ (n 1) + t 2 k 2 k 3 = f(t n 1 + t 2, x(n 1) + t 2 k 2, ẋ (n 1) + t 2 k 2) k 4 = ẋ (n 1) + t k 3 k 4 = f(t n, x (n 1) + t k 3, ẋ (n 1) + t k 3) Note : T n = T n 1 + t. Notez que quelque soit l intégrateur numérique choisi, si la force est nulle, il permettra de calculer un déplacement rectiligne uniforme (vitesse constante). 4
4 Tests de collision Les bactéries lors de leurs déplacements vont être amenées à être en contact (collision) avec divers éléments de l assiette de Petri : sources de nourriture, éventuellement des obstacles, paroi de l assiette, etc. De telles collisions ont un impact sur le déroulement de la simulation (consommation de nourriture, rebonds pendant le déplacement etc.), il est donc nécessaire de les détecter/tester. On considérera, pour simplifier, que la taille de la bactérie est négligeable : tester si elle est en collision avec un élément e de l assiette de Petri revient dans ces condition à tester si le point que constitue sa position est en collision avec e. Les sources de nourritures peuvent être assimilées à des boites ou à des sphères (selon des choix d implémentation simples). 4.1 Test de collision avec l assiette de Petri L assiette de Petri sera dans le projet un simple cylindre dessiné en position de base (centré en OZ et dont la base à 0 comme coordonnée Z). Dans ces conditions, soit p la position de la bactérie, r le rayon du cylindre et h sa hauteur, on considérera qu elle a été en collision avec l assiette de Petri : p [0] p [0] + p [1] p [1] > r 2 p [2] > h p [2] < 0 où désigne le "ou" logique. 4.2 Test de collision d un point avec une boîte Ce test sera implémenté de façon élémentaire, il ne fonctionnera que sur des boites représentées dans le repère absolu ; ce qui sera le cas dans l implémentation suggérée. Soit p le point à tester et, e min et e max les deux sommets extrêmes de la boites (resp. celui de plus petite et de plus grande norme dans le repère absolu) on considérera que p est en collision avec la boîte si la condition suivante est remplie : p [0] > e min [0] p [1] > e min [1] p [2] > e min [2] où désigne le et logique. p [0] < e max [0] p [1] < e max [1] p [2] < e max [2] 5
4.3 Test de collision d un point avec une sphère Un point sera considéré comme étant en collision avec une sphère si la distance qui le sépare du centre de la sphère est inférieure au rayon de la sphère. 4.4 Test de collision d un point avec un plan On considérera qu un point x 1 est en collision avec un plan si la distance la plus courte de x 1 au plan est inférieure à un certain seuil (par exemple 0.1) 4.4.1 Plan infini Dans le cas d un plan infini défini par un point O et un vecteur normal n (unitaire), le point x 2 le plus proche sur ce plan du point x 1 s exprime comme : x 1 x 2 O n x 2 = x 1 + ( ( O x 1 ) n ) n n (. désigne le produit scalaire) 4.4.2 Portion de plan Dans le cas d une portion rectangulaire de plan d origine O, de normale n (unitaire), de longueur L suivant la direction e L et de largeur l suivant la direction e l, le point x 2 le plus proche sur ce plan au point x 1 se calcule comme suit : n O e l e L x 1 x 2 1. Commencez par calculer le point le plus proche dans le plan infini comme précédemment : ( x 2 = ( O x 1 ) ) n n x 1 + n 6
2. Calculez ensuite ses coordonnées suivant e L et e l : x 2L = ( x 2 O) e L, x 2l = ( x 2 O) e l. 3. Si x 2L > L sinon, si x 2L < 0 4. Ensuite, si x 2l > l sinon, si x 2l < 0 x 2 x 2 (x 2L L) e L, x 2 x 2 x 2L el. x 2 x 2 (x 2l l) e l, x 2 x 2 x 2l el. 5 Représentations graphiques Ce projet utilise la bibliothèque opengl pour ses aspects graphiques. Le dessin de sphères ou de cylindres par le biais de quadriques s y réalise très naturellement. Le dessin de plans peut se réaliser de multiples façons. L algorithme ci-après vous indique comment faire si vous utilisez une représentation du plan sous la forme : d un point p ; et d un vecteur unitaire orthognal au plan, orth. 7
Algorithme 1. Trouver deux vecteurs v 1 et, v 2 tels que ( orth, v 1, v 2 ) forment une base orthogonale de R 3. Ces vecteurs peuvent être trouvés par une méthode d orthogonalisation de type Gramm-Schmidt (. désigne le produit scalaire et le produit d un scalaire par un vecteur) : : (a) Soit les trois vecteurs e1 = (1., 0., 0.), e2 = (0., 1., 0.) et e3 = (0., 0., 1.) ; (b) v1 = e1 ( orth. e1) orth ; (c) si v1 < ε, v1 = e2 ( orth. e2) orth (ε est la précision en dessous de laquelle la norme de v1 sera considérée comme nulle (par exemple 0.01)) ; (d) v2 = e3 ( orth. e3) orth ( v1. e3) v1 ; (e) si v2 < ε, v2 = ( e2 ( orth. e2) orth ( v1. e2) v1) ; (f) v1 = v1 L (1./ v1 ) (L : largeur souhaitée pour le dessin) ; (g) v2 = v2 L (1./ v2 ) ; 2. dessiner le polygone de sommets p + v1 + v2, p v1 + v2, p v1 v2 et p + v1 v2 8