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.