• Aucun résultat trouvé

VII 2 2 Mise en équation en faisant le bilan des forces et des moments. VII 2 2 a Association d un modèle rigide et d un modèle déformable en 3D

N/A
N/A
Protected

Academic year: 2022

Partager "VII 2 2 Mise en équation en faisant le bilan des forces et des moments. VII 2 2 a Association d un modèle rigide et d un modèle déformable en 3D"

Copied!
15
0
0

Texte intégral

(1)

VII−2−2− Mise en équation en faisant le bilan des forces et des moments VII−2−2−a− Association d’un modèle rigide et d’un modèle déformable en 3D

Dans les exemples de la corde, on a utilisé la seule équation VII−48 pour calculer les composantes du vecteur déplacement. Pour écrire cette équation, on a effectué le bilan des forces qui agissent sur les noeuds. On n’a pas effectué le bilan des moments et par conséquent, on n’a pas pris en compte les rotations. Pour prendre en compte les rotations, une méthode consiste à considérer l’objet comme l’association d’un objet rigide capable de grandes rotations et de grands déplacements, et d’une peau déformable capable de petits déplacements au voisinage de l’objet rigide ( figure VII−23).

Figure VII−23 :

Association d’un modèle rigide et d’un modèle déformable Formulation

L’origine du repère MC est située au centre de gravité de l’objet (cdg). Ce centre de gravité est supposé identique pour l’objet rigide et pour l’objet déformé.

Soit l’orientation du repère MC par rapport au repère WC et soit la position du repère MC par rapport au repère WC.

La vitesse linéaire de déplacement du repère MC par rapport au repère WC (donc la vitesse de déplacement

du cdg) est .

La vitesse angulaire de rotation du repère MC par rapport au repère WC est . Noter que la rotation s’effectue autour d’un axe de vecteur unitaire , par conséquent .

Après discrétisation de l’objet (n oints situés sur sa surface), on s’intéresse à la position de tous les points par rapport au repère WC, et à la vitesse de tous les points par rapport au repère WC.

(2)

On connaît où représente le petit déplacement de la surface déformée par rapport à la surface de l’objet rigide.

La vitesse s’écrit :

(VII−64)

est défini dans le repère mobile MC qui tourne à la vitesse angulaire par rapport à WC. La loi de composition des

vitesses dit que :

(VII−65)

Or, dans le repère MC :

avec constante dans MC.

ainsi :

(VII−66)

par conséquent :

(VII−67)

et :

Les petits déplacements sont représentés par le vecteur .

Il y a donc 3 vecteurs inconnus , et .

(3)

Il est démontré dans [TER88] qu’il existe 3 équations différentielles couplées pour trouver ces 3 inconnues :

− Translation du repère MC par rapport au repère WC (bilan des forces pour le corps rigide) :

(VII−68)

− Rotation du repère MC par rapport au repère WC (bilan des moments pour le corps rigide) :

(VII−69)

Déformation dans la système MC (bilan des forces pour les petites déformations) :

(VII−70)

Cette dernière relation est de la forme de l’équation VII−42 dans laquelle remplace . La résolution est effectuée dans le système MC et non pas dans le système WC, d’où la suppression de l’indice WC

pour .

Dans ces trois expressions :

est le volume unitaire, et permet d’intégrer sur le volume complet de l’objet,

est la masse par unité de volume (densité de masse),

est le coefficient de frottement par unité de volume (densité de frottement),

m est la masse totale de l’objet, telle que ,

est le tenseur d’inertie par rapport à un axe passant par le centre de gravité de l’objet. est le moment d’inertie. Les

propriétés du solide vis à vis des rotations sont mémorisées dans le tenseur d’inertie. Le tenseur est une matrice 3x3 symétrique.

(VII−71)

Chaque composante s’écrit :

(VII−72)

(4)

où est le symbole de Kronecker égal à 1 pour , et 0 ailleurs. Dans cette expression et représentent respectivement les coordonnées , et .

Lorsque l’axe ne passe pas par le cdg de l’objet ( non confondu avec le cdg), les composantes du tenseur d’inertie sont données ci−dessous :

(VII−73)

La force extérieure appliquée à un élément s’écrit : ,(VII−74)

La force extérieure totale appliquée au corps rigide s’écrit : ,(VII−75)

Le moment total appliqué au corps rigide s’écrit : (VII−76)

représente le moment de la force appliquée à un élément par rapport à un axe passant par le cdg du corps.

La troisième relation met en jeu plusieurs forces :

représente la force d’inertie due à translation de la masse élémentaire ,

représente la force centrifuge due à la rotation du repère MC (c’est une force d’inertie),

représente la force de Coriolis due à la vitesse de déplacement des masses élémentaire DANS le repère MC. Quand une masse se déplace à la vitesse relativement à un repère MC, qui tourne sur lui même avec une vitesse angulaire , une force dite force de Coriolis agit sur la masse ,

représente la force transversale due à l’accélération angulaire du repère MC,

représente la force de frottement,

représente la force élastique interne de la forme ,

(5)

Calcul numérique

Le calcul numérique consiste à calculer les trois inconnues après discrétisation des équations VII−68, VII−69 et VII−70, en remplaçant les signes par des signes . On considère NBNOD points numérotés de 0 à NBNOD−1 de masse de façon que la masse totale du corps soit .

Pour simplifier les écritures et les explications, on se place dans le cas où (force de frottement nulle) et on ne prend que partiellement en compte l’influence du modèle déformable sur le modèle rigide en supprimant les termes d’inertie avec dans les relations VII−68 et VII−69.

Dans ce cas, les deux premières équations pour le modèle rigide s ‘écrivent :

(VII−77)

(VII−78)

On pose :

(VII−79)

VII−79 porté dans VII−77 donne la relation VII−80 qui permet de calculer la vitesse de translation du repère MC par rapport au repère WC.

(VII−80)

On pose :

(6)

(VII−81)

VII−81 portée dans VII−78 donne la relation VII−82 qui permet de calculer la vitesse angulaire du repère MC par rapport au repère WC.

(VII−82)

Pour visualiser la configuration à chaque pas de temps ,on considère que l’objet est translaté de

(VII−83)

et pivoté de

(VII−84a)

autour d’un axe unitaire passant par son centre de gravité, origine du repère MC.

(VII−84b)

de façon que

(VII−85)

(VII−86)

est la matrice de rotation autour de l’axe

(VII−87)

On déduit ainsi :

(VII−88)

(7)

(VII−89)

La relation VII−89 permet de visualiser la configuration à l’instant .

Le vecteur des petits déplacements dus au modèle déformable est donné par la formule VII−48, en considérant que la version discrétisée de la relation VII−70 est de la forme

(VII−90)

La matrice d’inertie donnée par la relation VII−71 dépend du temps en raison de la partie déformable de l’objet. Ses composantes après discrétisation s’écrivent sous la forme suivante :

(VII−91) Dans cette expression, représente la masse élémentaire au noeud n de position .

Programmation

Le programme balle3D.cpp permet d’animer un objet maillé en 3−connexe situé dans une boite parallélépipédique. Il utilise les formules présentées ci−dessus pour animer l’objet en l’absence d’obstacle, et utilise d’autres formules présentées plus loin dans ce paragraphe pour prendre en compte les collisions de l’objet avec la boite rigide

Ces formules sont programmées dans les fonctions myinit() et boucle() du programme balle3D.cpp. Pour comprendre rapidement le fonctionnement du programme, il faut le considérer comme une suite logique au programme corde3D.cpp. La plupart des vecteurs et matrices ont les mêmes noms et les mêmes fonctions. Le vecteur vecDt représente ici les petits déplacements de l’objet déformable dans le système MC, notés

dans les formules.

La fonction Charger_Objet() appelée au début de myinit(), permet de charger un objet maillé en 3−connexe.

Elle remplit le vecteur posinit et le tableau des connexions reseau. Par défaut on charge la sphère de niveau 0 (ou on définit un cube si l’instruction goto balle; est supprimée en début de la fonction myinit()). On peut

(8)

charger une sphère de niveau plus élevé ou un objet 3−connexe plus complexe, par exemple une tête déformable, mais le programme balle3D.cpp n’est pas optimisé. Par conséquent, tout niveau autre que le niveau 0 demande des temps de calcul très importants.

A l’instant , les repères MC et WC sont confondus. Par conséquent les vecteurs des forces extérieures vecfextMC et vecfextWC exprimés dans les repères MC et WC sont égaux. La force extérieure est la force de gravité.

La fonction myinit() calcule les conditions initiales pour le modèle déformable, pour le modèle rigide, et pour leur association.

Pour le modèle déformable on choisit un vecteur déplacement vecDt nul, et une vitesse initiale vinit. Les vecteurs initiaux vecDtpointpoint et vecDtmdt sont initialisés avec les relations VII−49 et VII−50.

Pour le modèle rigide, on place le vecteur vecct représentatif de à l’origine du repère WC (puisque MC et WC sont confondus à ), et on choisit une vitesse initiale vecvt (représentative du vecteur ) égale à vinit. Le vecteur vecrt (représentatif de ) est initialisé à posinit.

Pour l’association des modèles déformable et rigide, la connaissance des vecteurs initiaux et permet d’initialiser le vecteur vecqt (représentatif de ) et le vecteur vecxt (représentatif de ).

Les composantes de la matrices d’inertie sont mémorisées dans la matrice matinertiet.

Pour les rotations, on initialise l’axe unitaire veca (représentatif de ) dans la direction de l’axe . On initialise l’incrément d’angle à 0.1 degré pour le premier pas de temps (représentatif de ). On initialise le module de la vitesse angulaire modomegat (représentatif de ) à la valeur , et le vecteur vecomegat (représentatif de ) à la valeur .

Les calculs pour chaque pas de temps sont réalisés dans la fonction boucle(). qui est scindée en quatre parties. Une partie dédiée au calcul de l’objet rigide , une partie dédiée au calcul de l’objet déformable, une partie dédiée à l’association des modèles rigide et déformable, et une partie dédiée au traitement des collisions avec la boite.

Dans la partie dédiée au modèle rigide, on calcule la somme des forces sigmaf (représentative de ) et la somme des moments sigmamoment (représentative de ) dans le système WC. Puis on calcule les vecteurs vecd (représentatif de ), theta (représentatif de ), veca (représentatif de ) d’après la relation VII−84b, et les matrices rot et rotT (représentatives de et de sa transposée, donc de son inverse).

Dans la partie dédiée au modèle déformable, on travaille dans le système MC. On calcule le vecteur vecRchapeau et la matrice matKchapeau, d’où l’on déduit le vecteur inconnu vecDtpdt (représentatif

(9)

de ). Les calculs prennent en compte la force d’amortissement. Les calculs ne tiennent pas compte de la force centrifuge, de la force de Coriolis, ni de la force transversale. On peut introduire ces forces en guise d’exercice.

Dans la partie dédiée à l’association des modèles rigide et déformable, on calcule les vecteurs vecrtpdt (représentatif de ) , et qtpdt (représentatif de ) d’après les relations VII−86 et VII−89, d’où l’on déduit la matrice d’inertie matinertiet pour l’instant courant.

On calcule les vecteurs inconnus vecomegatpdt (représentatif de ) d’après la relation VII−82 et vecvtpdt (représentatif de ) d’après la relation VII−80.

La nouvelle position du centre de gravité vecctpdt (représentative de ) est déduite de la relation VII−85, et la nouvelle position des noeuds vecxtpdt (représentative de ) est déduite de la relation VII−89. Le vecteur vecxtpdt est visualisé dans la fonction display().

Collision

Dans une scène modélisée, les objets sont soumis à des contraintes d'espace. Les contraintes d'espace sont toujours présentes dans une scène formée de plusieurs objets et de plusieurs obstacles. Il y a en permanence des collisions volontaires ou non volontaires.

Le traitement d'une collision est effectué en deux étapes. Prenons par exemple la collision sur le sol de l’objet 3−connexe constitué de plusieurs masses ponctuelles reliées entre elles par des ressorts :

− C'est un problème de géométrie (il faut détecter la collision de chaque masse avec l'obstacle)

− C'est un problème de physique (il faut apporter une réponse à cette collision)

Détection de la collision

Avant la collision chaque masse a un certain comportement (par exemple elle se déplace suivant une trajectoire fonction de sa vitesse initiale et du champ de gravité). Les différentes positions des masses sont obtenues par le calcul à des instants successifs espacés de (la valeur de , horloge interne de l'objet, est fonction de la raideur de l'objet). Si à l'instant une masse est dans la position et qu'à l'instant suivant le calcul donne une position au delà de l'obstacle, un simple problème de géométrie permet de déduire la position du point d'impact et l'instant de la collision situé entre et .

Dans le programme balle3D.cpp la détection consiste à déterminer l’intersection de la trajectoire linéaire de chaque masse avec les plans de la boite. Le paramètre permet de déduire les coordonnées du point d’impact et la valeur de si on le désire.

(10)

Réponse à la collision

Connaissant la direction et la vitesse de déplacement de chaque masse avant l'impact, il faut trouver la nouvelle direction de déplacement et la nouvelle vitesse après l'impact. C'est un problème de physique qui consiste à dire que chaque objet reçoit une impulsion de la part de l'autre. L'impulsion a la dimension d'une force multipliée par le temps d'application de cette force. On considère généralement que la force est très grande et que le temps d'application est de durée nulle.

Dans le cas de l’association d’un modèle rigide et d’un modèle déformable, la réponse à la collision est traitée séparément pour les deux modèles.

Pour le modèle rigide, on montre sur la Figure VII−24 le cas général de deux solides de masse et dans l’espace 3D. Les solides se déplacent avec les vitesses de translation et , et tournent autour d’un axe et passant par leur centre de gravité avec les vitesses angulaires et

Figure VII−24 : Collision entre deux solides

Pour traiter la collision il faut prendre en compte l’impulsion due à la translation et l’impulsion due à la rotation.

Pour l’impulsion due à la translation on écrit que la variation de la quantité de mouvement d’un solide est égale à l’impulsion reçue de la part de l’autre solide :

(VII−92)

(VII−93)

soit 6 équations à 9 inconnues (les 3 composantes de )

(11)

L’impulsion est perpendiculaire au plan de collision si le choc est sans glissement. Dans ce cas, est porté par la normale au plan de collision. On montre sur la figure VII−24 comment déduire la normale. Si et représentent la position des centres de gravité à l’instant . Le plan de collision est perpendiculaire à l’axe . Comme l’impulsion est , seul le module de est inconnu. On dispose donc de 6 équations à 7 inconnues.

Pour l’impulsion due à la rotation, on écrit que la variation du moment cinétique d’un solide est égale au moment de l’impulsion reçue de la part de l’autre solide :

(VII−94)

(VII−95)

ce qui introduit 6 équations à 6 inconnues (les composantes de et ).

Pour introduire une 13ième équation, on écrit que la composante de la vitesse de translation relative des deux solides juste après le choc est égale et opposée à la vitesse de translation relative des deux solides juste avant le choc multipliée par un coefficient de restitution ε tel que .

Pour ε = 0 le choc est inélastique, pour ε = 1 le choc est parfaitement élastique. Soit :

(VII−96)

Les composantes entre parenthèses tiennent compte de la loi de composition des vitesses. Lorsqu’un point A est défini dans un repère MC en translation à la vitesse par rapport à un repère fixe WC, et que le repère MC tourne à la vitesse angulaire autour d’un axe passant par le centre de gravité O, alors la vitesse de translation du point A par rapport à un repère fixe WC s’écrit :

(VII−97)

A chaque collision détectée, il faut résoudre un système matriciel de 13 équations à 13 inconnues.

Dans le cas du programme balle3D.cpp, les obstacles sont immobiles. Tous les vecteurs indicés 2 sont nul, et il reste seulement un système de 7 équations à 7 inconnues qui s’écrit :

(12)

(VII−98) avec pour composantes connues dans le deuxième membre :

(VII−99) Pour le modèle déformable, on ne tient pas compte des rotations, et on doit résoudre un système de 4 équations à 4 inconnues pour chaque noeud entré en collision avec un obstacle :

(VII−100)

D'un point de vue informatique [KAL92], les séquences d'animation sont souvent représentées par un graphe d’événements. Un graphe d'événements est constitué d'unités d'événement montrées dans la figure VII−25a.

(13)

Figure VII−25 : Graphe d’événements

Pendant une unité d'événement, l'objet passe d'un comportement Bi à un comportement Bi+1 lorsque la fonction logique Li devient vraie.

Par exemple, la collision d'un objet sur le sol peut être décrite par une "ligne de temps" constituée d'une chaîne d'unités d'événements (figure VII−25b).

Les graphes d'événements permettent également de prendre en compte des situations où plusieurs événements différents peuvent produire le changement d'un comportement Bi, ou lorsqu'un comportement peut être obtenu suite à plusieurs événements différents. Il permet également de prendre en compte les comportements répétitifs sous forme de boucles.

Le déroulement parallèle de plusieurs graphes d'événements, chacun attaché à un objet de la scène, permet de considérer la scène comme un système à événements et suggère la façon de programmer les animations.

Les systèmes à événements ne nécessitent pas qu'un événement se produise à des intervalles de temps réguliers. Cet aspect asynchrone facilite le calcul des différentes configurations des objets. En effet, chaque objet peut renfermer sa propre horloge interne, et sa configuration peut être calculée à des intervalles de temps différents de ceux des autres objets.

En cas de détection d'une ou plusieurs collisions, tous les événements sont classés par ordre chronologique, puis on revient à l'instant te de la première collision détectée, et on relance les calculs à partir de cet instant.

L' algorithme correspondant est : pour

toute la durée de l'animation

pour chaque sous−système Si dans le système à événement

(14)

− Initialiser les indicateurs d'événements

− Calculer les comportements jusqu'à la prochaine image à moins qu'un événement ne se produise

Si aucun événement ne s'est produit alors− Sauvegarder ou visualiser l'image (instantané)

sinon− Trouver l'instant te du premier événement qui s'est produit,

− Faire un retour en arrière au temps te pour chaque sous−système Si,

− Changer le comportement du sous−système responsable du premier événement

en accord avec son graphe d'événements

Dans le cas du programme balle3D.cpp, dans la partie dédiée aux collisions, on n’a pas programmé la méthode ci−dessus. Un sous−système est un noeud, et le retour en arrière au temps te ne concerne que le noeud en cours de traitement. Les autres noeuds ne sont pas modifiés.

Le programme balle3D.cpp donne une idée de ce qui peut être réalisé pour aller plus loin en programmation.

Les différents comportements physiques et états de l’objet peuvent être encapsulés dans un objet (au sens des systèmes de programmation orientés objets). Chaque instance de l'objet exécutée par un processus est un acteur. Un acteur est capable de communiquer avec d’autres acteurs par l’intermédiaire de messages comme le font effectivement les processus et les fils ("threads") dans un système d’exploitation multitâches parallèle ou distribué.

La figure VII−26 montre quelques images d’une animation.

Remarque :

L’animation d’une corde avec un modèle rigide associé à un modèle déformable n’a pas de sens. Dans ce cas, il est nécessaire de mettre le problème en équation en utilisant le Lagrangien, c’est−à−dire en considérant l’énergie du système plutôt que le seul bilan des forces. La mise en équation d’un ressort avec le Lagrangien sort du cadre de ce livre. A titre indicatif, la mise en équation d’un ressort avec le Lagrangien est donnée dans [SMI87].

(15)

Figure VII−26 :

Animation dans l’espace tridimensionnel d’une surface 3−connexe avec traitement des collisions

Références

Documents relatifs

En fait, cette couche n'a pas vraiment été spécifiée ; la seule contrainte de cette couche, c'est de permettre un hôte d'envoyer des paquets IP sur le réseau... L'implémentation

Dataset from Applied Predictive Modeling, M. Kuhn

Ce problème apparaît naturellement dans de nombreux domaines scientiques (imagerie médicale, recalage de données mesurées en géologie, etc.) où l'on a aaire à plusieurs mesures

Dans le cas d’une association hiérarchique, la clé primaire de l’entité supérieure devient attribut clé étrangère dans la table issue de l’entité inférieure. Dans le cas

- On a besoin de connaître l’évolution de la distribution des richesses pour déterminer le stock de capital agrégé et donc les prix.. - Mais la distribution est un objet

Kodolphe Borcard /

1) Soit deux

Pour représenter le