Système masse-ressort
Transcription
Système masse-ressort
TP Système Masse-ressort T. Le Naour Année 2013-2014 Ce TP va vous permettre de simuler la déformation physique d’un maillage avec un système masseressort. Dans un premier temps nous verrons quelques rappels théoriques sur les systèmes masse-ressort, puis nous verrons comment les mettre en application dans le cadre de l’application 3D développée depuis le début du semestre. 1 Système Masse-ressort Formulation physique Un système masse-ressort est composé d’un ensemble N de particules de masse mi , position xi et de vitesse vi , avec i ∈ 1...N . Ces particules sont connectées par un ensemble S de ressorts décrit chacun par le vecteur (i, j, l0 , ks , kd ), où i et j sont les indices des particules adjacentes, l0 la longueur de référence, ks le coefficient de raideur et kd le facteur d’amortissement du ressort. Les forces de raideur à appliquer sur les particules i et j du ressort sont : fi = f s (xi , xj ) = ks (xj − xi ) (|xj − xi | − l0 ) |xj − xi | fj = f s (xj , xi ) = −f s (xi , xj ) = −fi (1) (2) D’un autre coté, les forces à appliquer au ressort correspondant au facteur d’amortissement sont : fi = f d (xi , vi , xj , vj ) = kd (vj − vi ). (xj − xi ) |xj − xi | fj = f d (xj , vj , xi , vi ) = −fi (3) (4) Nous pouvons finalement combiner ces deux forces pour un même ressort à travers l’équation : f (xi , vi , xj , vj ) = f s (xi , xj ) + f d (xi , vi , xj , vj ) (5) Simulation La simulation de ce type de système repose sur la seconde loi de Newton f = mẍ. L’idée est de déduire la position d’une particule à partir de son accélération a = ẍ = f /m où ẍ est la dérivée seconde de la position avec le bon respect du temps. Plus précisément, nous pouvons décomposer cette équation du second ordre en un couple de deux équations du premier ordre : v̇ = f (x, v)/m (6) ẋ = v (7) Les solutions analytiques de ces équations sont : Z v(t) = v0 + f (t)/m dt, (8) tt0 Z x(t) = x0 + v(t) dt, tt0 1 (9) La méthode la plus simple pour résoudre numériquement ces équations est d’en donner une approximation avec les différences finies : v t+1 − v t + O(∆t2 ), ∆t xt+1 − xt + O(∆t2 ), ẋ = ∆t v̇ = (10) (11) où ∆t est un pas de temps discret et t la frame courante. En substituant ces équations, nous obtenons finalement : v t+1 = v t + ∆t f (xt , v t )/m, (12) xt+1 = xt + ∆t v t . (13) Ce procédé est appelé schéma d’intégration explicite d’Euler. Il s’agit d’un schéma explicite car la valeur cherchée pour le temps d’après est directement calculée par rapport aux valeurs du temps courant. Ce schéma est le plus simple mais également le moins stable car approximatif. Algorithme Finalement la procédure d’animation d’un ensemble de particules par un système masse-ressort peut être décrit par l’algorithme suivant : Données: V : Vecteur de particules (masses) S: Vecteur d’arêtes // initialisation pour chaque particule i faire initialise xi , vi et mi fin // boucle de simulation tant que simulation faire // calcul des forces pour chaque particule P i faire fi ← f g f coll + j,(i,j)∈S f (xi , vi , xj , vj ) fin // simulation pour chaque particule i faire // schéma d’intégration vi ← vi + ∆t fi /mi xi ← xi + ∆t vi fin affichage du système fin Algorithm 1: Algorithme d’un système masse ressort 2 Conception Vous l’aurez compris, notre code va se diviser en 3 classes principales : P article, Spring et M SSystem (pour M assSpringSystem). D’autres classes hériterons éventuellement de la classe M SSystem spécifiques au type de simulation que vous souhaitez lancer. Rque: pour ne pas perdre de temps, vous utiliserez des structures afin de ne pas avoir à coder les accesseurs et mutateurs. La classe P article La classe P article possède • 3 attributs de type V ector3 : une position, une force et une vitesse ainsi qu’un attribut de type f loat la masse. • en plus de son constructeur et destructeur, écrivez une méthode Simulate correspondant au calcul de la position de la particule en fonction de sa force courante La classe Spring La classe P article possède • les 5 attributs vus précédemment. C’est à dire 2 pointeurs sur les masses auxquelles elle s’applique que 3 attributs de type f loat correspondant à longueur du ressort au repos, son coefficient de raideur et son coefficient d’amortissement. • en plus de son constructeur et destructeur, écrivez une méthode ApplyF orce, qui calcule les forces associées à la raideur et l’amortissement du ressort à appliquer aux masses. La classe M SSystem La classe M SSystem possède comme attributs • l’ensemble des particules • l’ensemble des ressorts • un certain nombre d’attributs que vous jugez intéressant d’ajouter (gravité, forces extérieurs, ... Cf partie suivante) ainsi qu’un certain nombre de méthodes : • une méthode Init • une méthode U pdate qui reprend les différentes phases introduites dans la deuxième partie de l’algorithme. • un certain nombre de méthodes propres au type de simulation que vous souhaitez réaliser (chargement d’un maillage, construction d’un tissu et avec quels ressors : en croix, croisés ... Cf partie suivante) 3 Application Figure 1: Exemples de déformations. 1. Faîte hériter votre classe M SSystem par une simulation de votre choix : • construisez une structure en carré (figure 1(1)) de dimension n × n de n2 masses. Tester plusieurs types de configuration de ressort (en croix, croisé, etc ...). • tester sur un maillage surfacique de votre choix (figure 1(2)) (le code de chargement est fourni) • tester sur un des maillages volumiques fournis (le code de chargement est fourni) 2. Tester plusieurs jeux de paramètres (masse, coefficient de raideur et d’amortissement) 3. Si vous avez de l’avance, tester une collision de votre maillage avec une sphère. 4. Re-coder votre méthode Simulate avec une intégration de Runge-Kutta (description dans la suite du document). Pourquoi cette méthode est-elle plus efficace ? Annexe : intégration de Runge-Kutta d’ordre 4 La méthode de Runge-Kutta d’ordre 4 tente de fournir une estimation des valeurs au temps t + 1 à partir du temps t en évaluant 4 fois la dérivée de f : une fois au point de départ (estimation d’Euler avec un pas de ∆t/2), deux fois au milieu de l’intervalle, et une fois en un point final estimé. Plus précisément, vis-à-vis du schéma d’intégration d’Euler, il faut remplacer les précédentes équations (12) et (13) par : a1 = v t ∆t a2 2 ∆t c1 = v t + b2 2 ∆t c2 d1 = v t + 2 ∆t xt+1 = xt + (a1 + 2b1 + 2c1 + d1 ) 6 b1 = v t + a2 = f (xt , v t )/m ∆t ∆t a1 , v t + a2 )/m b2 = f (xt + 2 2 ∆t ∆t c2 = f (xt + b1 , v t + b2 )/m 2 2 ∆t ∆t c1 , v t + c2 )/m d2 = f (xt + 2 2 ∆t v t+1 = v t + (a2 + 2b2 + 2c2 + d2 ) 6 Oui, cette méthode prend 4 fois plus de temps que la première puisqu’elle prend autant de temps que 4 intégrations d’Euler. Cela s’explique car le système nécessite un (re)calcul des forces 4 fois pour obtenir une estimation de v t+1 et xt+1 . Cette méthode est plus stable et bien plus efficace que celle d’Euler car elle fournit une meilleur estimation des valeurs au temps t + 1 à partir des valeurs au temps t.