Documentation détaillée de la partie simulation de l'application

Cette page explique :

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Fonctionnement de la partie simulation de l'application

Le graphe de scène

Le graphe de scène défini par la classe Scene permet de gérer les différents objets de la scène :

Les méthodes de la classe Noeud doivent ainsi obligatoirement être implémentées dans les classes relatives aux différents objets de la scène (même si elles ne font rien).

Programme principal

Le programme principal main contient un objet Scene correspondant au graphe de la scène. Cet objet contient une liste de tous les objets ObjetSimule qui vont être simulés, attachés à la scène au sein du programme principal (voir Le graphe de scène).

Une fois tous les objets attachés au graphe de scène, les méthodes suivantes de l'objet Scene sont invoquées (répercutant leur appel sur tous les objets attachés à la scène) :

A noter que, la gravité et la viscosité du milieu sont définies dans la Scene, c'est-à-dire que leurs propriétés sont identiques pour chacun des objets simulés. Leurs caractéristiques sont fournies au lancement de l'application via le fichier de données.

Structures de données pour la partie simulation

Les types

Les principaux types de structures de données utilisés dans le module de simulation sont les suivants :

Les classes

L'application permet l'animation d'objets 3D déformables. Ces objets sont ainsi représentés par un système masses-ressorts c'est-à-dire par un ensemble de particules connectées entre elles par des ressorts.

Les principales classes définies pour modéliser un objet sont ainsi les suivantes :

Représentation d'un objet de la scène

Les principales structures de données des objets simulés sont les suivantes :

La structure Maillage définit le Mesh relatif à l'objet simulé. Ainsi, tout objet de la scène est discrétisé en un ensemble de Particule qui sont reliées entre elles par des Ressort. A noter que pour le moment, tous les ressorts d'un même objet ont les mêmes caractéristiques physiques définies par l'utilisateur. Il sera possible d'ajouter ultérieurement ces caractéristiques pour chacun des ressorts constituant le maillage en les mettant par exemple dans un fichier de données. Ce Maillage est créé lors de l'initialisation de l'objet simulé, notamment à partir du fichier des facettes fourni en paramètre de l'objet à simuler. Ce maillage est utilisé pour connaître les interactions qui existent entre les particules d'un objet donné.

La structure P contient les coordonnées de positions des particules constituant l'objet à simuler. Cette structure est initialisée à partir du fichier de données correspondant rattaché à l'objet.

La structure V contient les coordonnées de vitesses des particules constituant l'objet à simuler. Les éléments de cette structure sont initialisés à zéro au départ.

La structure A contient les coordonnées des accélérations des particules constituant l'objet à simuler. Les éléments de cette structure sont initialisés à zéro au départ.

La structure Force contient les coordonnées des forces appliquées aux particules constituant l'objet à simuler. Les éléments de cette structure sont initialisés à zéro au départ.

La structure M contient les coordonnées de positions des particules constituant l'objet à simuler. Cette structure est initialisée à partir du fichier de données correspondant rattaché à l'objet.

Algorithmes de la simulation

Boucle de la simulation

A chaque pas de temps, les calculs suivants sont effectués pour un objet donné :

Calcul des forces

Les forces f appliquées aux particules constituant un objet sont dues à la gravité du milieu ainsi qu'aux interactions des autres particules constituant l'objet. La force appliquée à la ième particule du système peut ainsi être formulée par :

$ \vec{f}_i(t) = \sum_{j\mid(i,j)\in E} \left[\vec{f}^{e}_{i,j}(t) + \vec{f}^{v}_{i,j}(t) \right] \: + m_i \vec{g} +\: \vec{f}_{externe}(t),$

avec :

$ \left\{ \begin{array}{lcl} \vec{f}^{e}_{i,j}(t) &=& k_{ij} \left(\|x_i(t) - x_j(t)\| - l_{ij}\right)\; \vec{u}_{ij}(t),\\ \vec{f}^{v}_{i,j}(t) &=& {\nu}_{ij} \left(v_i(t) - v_j(t)\right) \; \vec{u}_{ij}(t) \; \vec{u}_{ij}(t), \end{array} \right. $

où :

Pour des raisons d'implémentation, les forces dues à la gravité sont en fait ajoutées dans le calcul des accélérations.

Calcul des accélérations

Les accélérations des particules sont obtenues à partir de leurs forces en utilisant la loi fondamentale de la dynamique, avec $ a_i = \frac{f_i}{m_i} $$a_i$ est l'accélération de la particule i, $f_i $ la force appliquée sur cette particule, et $m_i $ sa masse.

C'est au sein de cette méthode que le vecteur des forces est réinitialisé.

Calcul des vitesses et des positions

Les vitesses et les positions des particules sont obtenues en utilisant la méthode explicite de Leap-Frog Verlet :

$ \begin{array}{lr} \left\{ \begin{array}{ccl} v(t_0) &=& v_0\\ v(\frac{h}{2}) &=& v_0 + \frac{h}{2}v'_0\\ x(t_0) &=& x_0 \end{array} \right., & \left\{ \begin{array}{ccl} v(t+\frac{h}{2}) &=& v(t-\frac{h}{2}) + hv'(t) \\ x(t+h) &=& x(t) + hv(t+\frac{h}{2}) \end{array} \right.. \end{array} $


Généré le Thu Jan 24 19:12:00 2008 pour Animation 3D par  doxygen 1.5.1