dynamics.tex

<< Mécanique 1 : Cinématique linéaire et calcul infinitésimal

Table des matières

Courbes en 3D >>

Chapitre 12

Mécanique 2 : Dynamique linéaire et rotationnelle

La Force est ce qui donne à un Jedi son pouvoir.
C’est un champ d’énergie créé par tous les êtres vivants.
Elle nous entoure et nous pénètre.
Elle maintient la galaxie ensemble.

— Obi-Wan Kenobi dans
Star Wars Épisode IV : Un nouvel espoir (1977)

Le Chapitre 11 portait sur la cinématique linéaire — comment décrire le mouvement d’un objet, sans nous préoccuper de la « cause » du mouvement, de son orientation, ni de la façon dont nous pourrions simuler cet objet sur un ordinateur. Les principaux objectifs de ce chapitre sont d’aborder ces trois sujets.

12.1Les trois lois de Newton

Sir Isaac Newton a établi trois lois simples qui fournissent un cadre, communément appelé la mécanique newtonienne, pour comprendre des systèmes physiques aussi divers qu’une pomme tombant d’un arbre, le mouvement des planètes, et les interactions physiques qui se produisent dans un jeu vidéo. La mécanique newtonienne est également appelée mécanique classique, et ce nom devrait vous alerter sur le fait que les lois que nous allons étudier sont fausses, dans le sens où elles ne concordent pas avec les résultats d’expériences menées à très grande vitesse (qui nécessitent la mécanique relativiste) ou à très petite échelle (qui nécessitent la mécanique quantique).1 Pour les phénomènes courants (et pour les phénomènes que nous devons simuler dans un jeu vidéo), la divergence entre les résultats prédits par la mécanique newtonienne et les résultats corrects (tels que correctement prédits par la mécanique quantique-relativiste) est généralement inférieure à ce qui peut être détecté avec les instruments les plus précis. Les différences dans les prédictions ne deviennent significatives qu’à des vitesses très proches de la vitesse de la lumière et à des échelles approchant la taille d’un atome ; sinon, toutes les théories sont en grande concordance les unes avec les autres et avec les résultats expérimentaux. C’est précisément parce que la mécanique newtonienne a un si long et brillant historique de prédictions précises qu’il a été si choquant de découvrir que les lois avaient besoin d’être corrigées. Il devrait être évident que ces lois, ayant suffi à décrire les mouvements des corps célestes avec une grande précision, seront également tout à fait suffisantes pour nos besoins ici.

12.1.1Les deux premières lois de Newton : Force et masse

Le Chapitre 11 notait que la masse mesure le degré auquel un objet résiste à être accéléré. Cette résistance s’appelle l’inertie, et la grandeur physique nécessaire pour la surmonter et créer une accélération s’appelle la force. En d’autres termes, toutes ces « causes de mouvement » que nous avons si scrupuleusement évité de mentionner dans le chapitre précédent portent collectivement le nom de force.

L’idée que les objets résistent à l’accélération est résumée par la première loi de Newton.

Première loi de Newton

Tout corps persiste dans son état de repos ou de mouvement rectiligne uniforme, à moins qu’une force ne l’oblige à changer cet état.

Cela semble être une affirmation assez simple, même dans la traduction anachronique du latin original de Newton. Mais considérez combien il était audacieux pour Newton d’affirmer cela, alors que cela va si clairement à l’encontre des observations de bon sens que nous avons tous dans notre vie quotidienne ! Une façon plus « de bon sens » de penser à la force serait de supposer qu’une force est nécessaire non seulement pour mettre un objet en mouvement, mais aussi pour maintenir son mouvement. (C’est la règle sous ce qu’on appelle la dynamique aristotélicienne.) Après tout, une fois que nous cessons d’appliquer la force, l’objet finira bien par s’arrêter, n’est-ce pas ? Selon Newton, une fois qu’un objet est mis en mouvement, il ne nécessite aucune force pour continuer ce mouvement. En fait, Newton affirme que c’est la force qui est nécessaire pour arrêter l’objet, et en l’absence de cette force d’arrêt, l’objet continuera indéfiniment.

Bien sûr, la raison pour laquelle la première loi de Newton semble contre-intuitive est que dans notre expérience quotidienne, lorsque nous mettons des objets en mouvement, ils sont toujours arrêtés par la force omniprésente du frottement. Mais nous pouvons arguer que la loi de Newton est correcte, même si les objets s’arrêtent toujours par frottement, avec une simple expérience de pensée. Imaginons qu’on applique une certaine quantité de force et qu’on mette un objet en mouvement sur une surface. L’objet parcourra une certaine distance et finira par s’arrêter. S’est-il arrêté par manque de force de poussée continue, ou en raison d’une force qui a agi pour le ralentir ? Si on fait la même expérience sur différentes surfaces, en effectuant la poussée initiale de la même manière dans chaque cas, on constate que l’objet parcourt une plus grande distance sur une surface plus lisse, et une distance moindre sur une surface plus rugueuse. Vous n’êtes probablement pas surpris par ces résultats « de bon sens », mais remarquez comment ils contredisent en réalité la notion qu’une force est nécessaire pour maintenir l’objet en mouvement et valident les lois de Newton.

Newton a clarifié la relation précise entre masse, accélération et force nette dans sa deuxième loi.

Deuxième loi de Newton

L’accélération d’un corps est proportionnelle à (et dans la même direction que) la force externe nette agissant sur le corps, et inversement proportionnelle à la masse du corps :

𝐟=m𝐚.\begin{matrix} {\mathbf{f} = m\mathbf{a}.} \\ \end{matrix}

Cette simple équation est la plus importante de ce chapitre. Vous devriez certainement la mémoriser. Elle dit essentiellement que chaque fois qu’une particule de masse mm est observée en train d’accélérer à un taux 𝐚\mathbf{a}, vous pouvez être sûr qu’il existe une force nette 𝐟\mathbf{f} agissant sur la particule. De même, chaque fois qu’il y a une force nette, l’objet va accélérer, car force nette et accélération vont toujours ensemble. Il n’y a aucune exception à cette règle. L’accélération d’un objet est toujours proportionnelle à la force nette agissant sur lui à cet instant.

Cela ne signifie pas que lorsqu’il y a des forces sur un objet, il va nécessairement accélérer. Ni que si un objet n’accélère pas, il n’y a pas de forces agissant sur lui. Le 𝐟\mathbf{f} dans 𝐟=m𝐚\mathbf{f} = m\mathbf{a} est la force nette. Considérez les formidables forces exercées sur les poutres au bas d’un gratte-ciel. Il est clair qu’il y a une force qui veut accélérer la poutre vers le bas. Cependant, comme les poutres n’accélèrent pas vers le bas, nous savons par la deuxième loi de Newton que cette force vers le bas doit être exactement compensée par une autre force agissant dans la direction opposée.

Quel type de grandeur est la force ? Tout d’abord, la force a une magnitude et une direction, et est donc une grandeur vectorielle, tout comme l’accélération (bien qu’il soit parfois plus facile d’étudier la force dans un cadre unidimensionnel, tout comme nous l’avons fait avec l’accélération). Et la force doit avoir les mêmes dimensions (1D, 2D ou 3D, selon le « monde » dans lequel nous travaillons) que l’accélération 𝐚\mathbf{a} pour que l’Équation (12.1) ait un sens, car mm est une grandeur scalaire.

Utilisons l’analyse dimensionnelle pour déterminer les unités physiques à utiliser pour mesurer la force. La masse est l’une de nos grandeurs fondamentales, notée MM, et du chapitre précédent nous savons que l’accélération a pour unités L/T2L/T^{2}. Par conséquent (en abandonnant le gras pour indiquer les grandeurs vectorielles), la force doit avoir pour unités

Analyse dimensionnelle de la force

f=ma=(M)(L/T2).f = ma = (M)(L/T^{2}).

Lorsqu’on mesure avec les unités SI — masse en kilogrammes, longueur en mètres et temps en secondes — la force a pour unités « kilogramme mètre par seconde au carré ». C’est assez long à dire, donc cela porte un nom spécial, le Newton, noté N :

Le Newton est une unité SI de force

1N=1kgms2.1\ N = 1\ {kg}\frac{m}{s^{2}}.

Si vous avez du mal à saisir ce qu’est un « kilogramme mètre par seconde au carré », souvenez-vous qu’un Newton est la quantité de force nécessaire pour accélérer une masse de 1 kg à un taux de 1 m/s2s^{2}.

Il y a un malentendu courant que nous aimerions corriger le plus tôt possible. La force crée une accélération sur un corps, et elle agit dans le temps. Par exemple, la question « Quelle quantité de force faut-il pour amener un objet de 100 lb à aller à 100 mi/h ? » n’a pas de sens. La force ne produit pas directement de la vitesse, elle fait changer la vitesse au fil du temps. Cela peut être particulièrement déroutant lorsqu’on considère les collisions, comme une balle rebondissant sur le sol ou frappée par une batte. Bien que la vitesse semble avoir changé instantanément, ce qui se passe vraiment, c’est qu’une très grande force agit pendant une durée très courte (mais finie). Nous étudions les collisions plus en détail dans la Section 12.3. En général, dans les simulations numériques, les forces impulsives sont gérées différemment des forces plus persistantes agissant sur plusieurs étapes de simulation, donc pour l’instant, ne pensez pas à une force comme à un choc ; pensez-y plutôt comme à une poussée ou une traction progressive qui pourrait être fournie par, par exemple, un ressort, le vent ou la gravité.

Nous avons dit que l’Équation (12.1) est la façon traditionnelle d’exprimer la relation entre force, masse et accélération. Cependant, écrite de cette façon, avec la force au membre gauche, vous pourriez avoir l’idée que la situation habituelle est de connaître la masse et l’accélération, et d’utiliser les lois de Newton pour calculer la force. En fait, surtout dans les simulations numériques, le scénario le plus courant est que nous avons calculé les forces agissant sur un corps, et nous souhaitons prédire la réponse du corps à ces forces. Autrement dit, nous utiliserons généralement la deuxième loi de Newton sous la forme

Nous utilisons généralement cette forme de la deuxième loi de Newton

𝐚=𝐟/m.\begin{matrix} {\mathbf{a} = \mathbf{f}/m.} \\ \end{matrix}

La plupart des manuels de physique enseignent l’outil conceptuel important connu sous le nom de diagramme du corps libre. La deuxième loi de Newton, notamment telle qu’exprimée dans l’Équation (12.2), est au cœur de cet exercice. La procédure de base est la suivante, en commençant par une représentation de l’objet.

  1. Dessiner et étiqueter toutes les forces agissant sur lui.

  2. Additionner ces forces (par addition vectorielle) pour calculer la force nette.

  3. Utiliser la deuxième loi de Newton (Équation (12.2)) pour calculer l’accélération de l’objet.

  4. Intégrer l’accélération pour déterminer le mouvement de l’objet. Lors de la résolution analytique des problèmes, cela signifie résoudre des équations différentielles. Nous n’utilisons pas d’équations différentielles dans ce livre car il n’y a que quelques cas simples que nous examinerons analytiquement. Des méthodes numériques d’intégration doivent être utilisées. Plus loin, nous examinons l’intégration d’Euler, qui est la méthode la plus simple imaginable, mais aussi celle utilisée par la plupart des simulateurs de corps rigides en temps réel.

La procédure ci-dessus est un outil très important que nous utilisons plusieurs fois dans la Section 12.2 ; c’est aussi essentiellement la façon dont la plupart des simulations physiques numériques fonctionnent à l’intérieur d’un ordinateur. Bien sûr, la simplicité avec laquelle nous avons décrit ce processus en 4 étapes cache de nombreuses difficultés troublantes. Les forces dans l’Équation (12.2) peuvent varier continuellement dans le temps ; dépendre du temps, de la position et de la vitesse ; présenter des non-linéarités ou des discontinuités ; et en général être difficiles à calculer exactement ou à exprimer et intégrer sous forme fermée. La Section 12.6 traite des simulations physiques, mais pour l’instant le point clé que nous voulons souligner est que la deuxième loi de Newton est l’équation motrice fondamentale.

12.1.2Référentiels inertiels

Si on prend le cas particulier où 𝐟=0\mathbf{f} = 0, alors selon la deuxième loi de Newton, 𝐚=0\mathbf{a} = 0. C’est une reformulation de sa première loi. Ainsi, si Newton avait été juste un peu plus malin, il aurait pu dire la même chose en seulement deux lois au lieu de trois. Bien sûr, Newton n’a pas seulement brisé la barrière du « bon sens » pour créer des formules élégantes expliquant le fonctionnement de chaque système physique dans l’univers entier, il a également inventé simultanément une branche complète des mathématiques nécessaires pour explorer pleinement ces idées — le calcul infinitésimal. Alors peut-être était-il un gars intelligent après tout. Nous supposons qu’il avait une bonne raison de conserver sa première loi ; nous l’interprétons comme une déclaration sur les référentiels.

Les vecteurs 𝐚\mathbf{a} et 𝐟\mathbf{f} sont spécifiés dans un certain référentiel, et si nous choisissons un mauvais référentiel, l’équation n’est pas vérifiée. Les référentiels dans lesquels les lois mécaniques fondamentales sont vérifiées (notamment 𝐟=m𝐚\mathbf{f} = m\mathbf{a}) sont connus sous le nom de référentiels inertiels. Les espaces de coordonnées pour lesquels cette loi n’est pas vérifiée à moins d’inventer des forces fictives sont appelés des référentiels non inertiels.

image

Figure 12.1 Un robot dans un ascenseur en chute libre est dans un référentiel non inertiel. Il doit inventer une force fictive vers le haut pour contrebalancer la gravité afin d’expliquer pourquoi son sandwich au hareng ne tombe pas.

Par exemple, imaginez un robot mangeant un sandwich au hareng dans un ascenseur. Quelqu’un coupe les câbles de l’ascenseur, et l’ascenseur, le robot et le sandwich commencent à tomber. Or, ce robot a été programmé avec la connaissance qu’il aime manger des sandwichs au hareng,2 mais sans aucun sens général de la préservation de soi, il ne panique pas. Il regarde le sandwich au hareng flotter dans l’air au lieu de tomber sur le sol de l’ascenseur, comme il le prévoirait raisonnablement. Le robot, ayant également été programmé avec une compréhension incomplète des lois de Newton, se dit : « Mon Dieu, c’est assez inhabituel ! Je sais que la gravité doit tirer ce sandwich vers le bas et je sais que 𝐟=m𝐚\mathbf{f} = m\mathbf{a}, et puisque le sandwich n’accélère pas vers le bas, la force nette agissant sur lui doit être nulle. Par conséquent, il doit y avoir une force vers le haut agissant sur ce sandwich. Tout à fait fascinant ! Quelle pourrait être la source de cette force ? Maintenant, si je calcule... » CRASH !

image

Figure 12.2 Un extraterrestre regardant l’ascenseur tomber alors que la Terre passe ne verra rien qui contredise les trois lois de Newton, en supposant que la période de temps est suffisamment courte pour que la rotation de la Terre et sa trajectoire courbée ne soient pas des facteurs significatifs.

Un spectateur au sol ne verrait pas la nécessité d’inventer une force fictive pour expliquer le comportement du sandwich. En utilisant un référentiel avec l’origine fixée au bas du bâtiment, le spectateur voit le sandwich accélérer vers le bas, et n’a aucune raison de penser que quelque chose ne va pas.3 La personne qui passe en voiture ne voit pas non plus de problèmes. Dans le référentiel de la voiture, le sandwich semble se déplacer en mouvement parabolique. Mais la relation 𝐟=m𝐚\mathbf{f} = m\mathbf{a} semble être vérifiée, et donc le conducteur observe que les lois de Newton sont valides dans son référentiel. De même pour la civilisation extraterrestre avancée regardant depuis leur vaisseau spatial camouflé tandis que la Terre file devant (voir la Figure 12.2). De leur4 perspective, tout semble obéir aux lois de Newton. Pour l’extraterrestre, la Terre se déplace à une vitesse linéaire constante et la trajectoire de l’ascenseur est parabolique, tout comme nous le prédirions en utilisant les équations de projectile développées dans la Section 11.6. (En fait, nous ignorons quelques points plus fins, comme la rotation de la Terre, la trajectoire courbée qu’elle suit en orbitant autour du Soleil, et le do-si-do qu’elle fait avec la Lune. Ces déviations par rapport à une vitesse linéaire constante sont les exceptions qui confirment la règle : c’est pourquoi un référentiel fixé à la surface de la Terre n’est pas tout à fait un référentiel inertiel. Des expériences comme le pendule de Foucault peuvent détecter la différence, même si elle est faible.)

En résumé, si un référentiel accélère ou tourne, le mouvement des objets décrit à l’aide de ce référentiel ne sera pas cohérent avec les lois mécaniques. Un référentiel inertiel doit être stationnaire ou se déplacer à une vitesse linéaire constante.

12.1.3La troisième loi de Newton

La troisième loi de Newton est souvent mal comprise malgré le fait qu’elle soit celle le plus souvent citée. Elle a une certaine justice zen.5

Troisième loi de Newton

À toute action correspond toujours une réaction égale et opposée. Ou bien, les forces de deux corps l’un sur l’autre sont toujours égales et dirigées dans des directions opposées.

Cette loi dit essentiellement qu’il n’existe pas de force unilatérale unique. Si l’objet AA pousse ou tire l’objet BB, alors l’objet BB pousse ou tire toujours en retour sur l’objet AA avec une force de même magnitude mais de direction opposée. Si la gravité me tire vers la Terre, elle tire aussi la Terre vers moi ! Une force fait toujours partie d’une interaction entre deux corps.

Dans les diagrammes, on dessine souvent une force comme une flèche, car c’est un vecteur. Mais en réalité, ces diagrammes seraient plus précis si les deux extrémités de la flèche avaient des pointes. Quand on laisse de côté l’autre côté de la flèche, c’est parce qu’il agit sur un objet qui ne nous intéresse pas. Quand vous voyez une flèche à sens unique représentant une force dans un diagramme, vous pouvez toujours compléter l’autre moitié dans votre esprit.

Une source de malentendu sur la troisième loi de Newton est le mot « réaction ». Le but de ce mot est de décrire les forces comme étant opposées l’une à l’autre. Il n’est pas censé impliquer un lien causal entre elles ; ni l’une ni l’autre des forces n’est une « cause » ou un « effet ». Les deux forces opposées agissent simultanément et, en ce qui concerne les lois de la physique, ont un statut égal.

Mais mis à part cette inférence erronée de cause à effet, la troisième loi est tout simplement contre-intuitive. Disons qu’un gars nommé Moe pousse une boîte vers l’avant sur le sol. La boîte pèse deux fois plus que Moe, et il l’a placée sur un chariot qui roule avec très peu de frottement. Selon la troisième loi de Newton, la boîte repousse Moe. Mais alors pourquoi la boîte accélère-t-elle et pas Moe ? Il ne semble pas y avoir des « actions égales et opposées » qui se produisent ici.

Des paradoxes comme ceux-ci sont toujours résolus en considérant toutes les forces agissant sur les deux corps. Dans l’exemple qui vient d’être discuté, Moe ne flotte pas dans les airs, sinon il aurait été accéléré vers l’arrière comme la troisième loi de Newton prédit qu’il le serait. (Considérez ce qui se passerait si Moe et la boîte étaient sur de la glace.) Non, Moe se tient sur le sol. Par la force du frottement, Moe pousse contre la Terre et la Terre pousse en retour contre Moe. En fait, si on suppose que Moe fait quelques progrès vers l’avant au lieu d’être simplement coincé là à grogner, alors la force de la Terre qui pousse contre lui doit dépasser la force de la boîte qui pousse en retour contre lui, et il accélère vers l’avant. Cela est illustré dans la Figure 12.3.

image

Figure 12.3Les quatre forces impliquées dans la poussée de la boîte par Moe

Un lecteur curieux pourrait se demander, à propos du scénario précédent, « Pourquoi la Terre n’accélère-t-elle pas alors ? » La réponse courte est : « Elle le fait ! » Une réponse de longueur moyenne est : « Elle le fait, à court terme. » Pour la réponse complète, nous devrons attendre la Section 12.3, qui nous en dira un peu plus sur la quantité de mouvement.

Bien sûr, ces questions théoriques sont certainement intéressantes à méditer, mais quelle application pratique y a-t-il à la troisième loi de Newton ? L’application la plus importante, pour nos besoins, est la justification de simplifier un corps rigide et de le traiter comme une seule particule. Par exemple, plus tôt nous avons considéré les forces agissant sur une grande poutre dans un gratte-ciel. Et si la poutre n’est pas une seule pièce solide, mais qu’elle est en réalité composée de deux poutres boulonnées ensemble ? Alors ce qui se passe vraiment, c’est que des forces poussent vers le bas sur la partie supérieure de la poutre, qui pousse vers le bas sur la partie inférieure de la poutre, qui pousse vers le bas sur la Terre. De même, la Terre pousse vers le haut sur la partie inférieure de la poutre, qui pousse vers le haut sur la partie supérieure de la poutre.

Mais pourquoi s’arrêter là ? N’importe quel objet n’est-il pas en réalité composé non pas de deux ou trois pièces, mais de milliards de molécules ? Comment pouvons-nous calculer toutes ces forces quantiques-électriques compliquées ? C’est là qu’intervient la troisième loi de Newton. Nous sommes justifiés à traiter cette poutre épissée comme un seul corps rigide, et nous pouvons ignorer toutes les forces internes, à condition que le corps reste rigide, ce qui signifie que toutes les paires de points à l’intérieur de l’objet maintiennent une distance fixe entre elles. Dans cette situation, les parties n’accélèrent pas les unes par rapport aux autres, ce qui signifie que les forces internes doivent être exactement équilibrées. En d’autres termes, toutes les forces internes s’annulent et ne contribuent donc pas à la force nette, c’est pourquoi nous pouvons les ignorer. Bien sûr, dans la mesure où les pièces accélèrent réellement les unes par rapport aux autres, tout calcul fait en ignorant les forces internes sera inexact. Si la flexion ou la compression de l’objet est très légère, nos calculs ne seront pas parfaits, mais ils seront très proches ; si l’objet se brise, nos calculs seront sans signification.

Nous pouvons généraliser de tels arguments encore plus au cas où les parties se déplacent effectivement les unes par rapport aux autres. Bien sûr, un objet avec des parties internes mobiles est le contraire d’un corps rigide ; cependant, nous verrons que dans de nombreux aspects, nous sommes toujours capables de traiter ces systèmes compliqués comme des « particules ». La Section 12.3 discute de cette idée et de la façon dont elle nous permet de résoudre le paradoxe de Moe et de sa boîte.

12.2Quelques lois de force simples

De nombreux types de forces différents sont à l’œuvre dans notre univers.6 Dans une simulation en temps réel, on ignore souvent certaines forces, on en fait des approximations, et on invente même des forces fictives7 pour obtenir un effet souhaité (comme forcer une trajectoire à obéir aux contraintes d’un animateur, ou aider l’IA ou le joueur à atteindre la cible). Bien que notre principe directeur soit toujours 𝐟=m𝐚\mathbf{f} = m\mathbf{a}, les méthodes utilisées pour définir 𝐟\mathbf{f} peuvent varier considérablement.

Cette section discute de trois forces importantes qui existent dans le monde réel et sont souvent utilisées dans les simulations physiques. La gravité, le frottement et les ressorts font l’objet des Section 12.2.1, Section 12.2.2 et Section 12.2.3, respectivement. Bien sûr, une simulation informatique peut devoir considérer beaucoup d’autres forces du monde réel, comme la poussée d’Archimède, la traînée ou la portance. L’objectif de ce livre est de donner un aperçu des sujets les plus importants et non d’être exhaustif ; cependant, des sources couvrant ces types de forces sont listées dans les lectures suggérées de la Section 12.7.

Une autre force extrêmement importante qui apparaît dans les simulations physiques est la force de contact, également connue sous le nom de force normale. C’est la force qui empêche les objets de se pénétrer mutuellement. Lorsqu’une boîte repose sur une table, la force que la table exerce sur la boîte, contrebalançant la force de la gravité et empêchant la boîte d’accélérer vers le bas, est appelée une force de contact. Les forces de contact dans un moteur physique sont intrinsèquement liées à la méthode du moteur pour résoudre les collisions et sont généralement gérées d’une façon qui constitue un compromis entre la stabilité de la simulation et la réalité physique. À ce titre, les détails de la façon dont les forces de contact sont calculées peuvent varier d’un moteur physique à un autre ; en fait, la résolution des collisions est un domaine de recherche très actif.

12.2.1Force gravitationnelle

Dans les Principia, Newton a énoncé toutes sortes de lois en plus des trois pour lesquelles il est le plus célèbre. L’une de ces lois, qu’il a découverte par l’analyse des mouvements des planètes, est la loi de la gravitation universelle, qui stipule que tous les objets de l’univers ressentent une force attractive les uns envers les autres. Cette force est proportionnelle au produit de leurs masses et inversement proportionnelle au carré de la distance entre les objets, et peut être calculée par l’Équation (12.3).

Loi de la gravitation universelle

f=Gm1m2d2.\begin{matrix} {f = G\frac{m_{1}m_{2}}{d^{2}}.} \\ \end{matrix}

Dans cette équation, ff est la magnitude de la force, m1m_{1} et m2m_{2} sont les masses des deux objets, et dd est la distance entre leurs centres de masse. (Nous aurons plus à dire sur ce qu’est exactement le centre de masse dans la Section 12.3.2.) GG est une constante physique de l’univers, approximativement égale à 6.673×1011Nm2kg26.673 \times 10^{- 11}\ N\ m^{2}\ {kg}^{- 2}.

La loi de l’attraction gravitationnelle universelle est très utile si vous voulez comprendre le mouvement planétaire ou les marées, ou si vous avez juste besoin d’une mauvaise blague de drague.8 Cependant, la plupart des simulations sont confinées à une région assez petite proche de la surface de la Terre. Lorsque nous faisons l’hypothèse typique qu’un axe cartésien pointe « vers le bas », nous ignorons la courbure de la Terre et fixons également la direction de la force gravitationnelle comme constante. Il est également courant d’ignorer la légère diminution de la force de gravité qui se produit à des altitudes plus élevées, et de supposer une valeur constante pour dd. Ainsi, si nous laissons m1m_{1} représenter la masse de la Terre, alors la seule variable dans l’Équation (12.3) est m2m_{2}, la masse de l’objet simulé. Dans la plupart des jeux vidéo, la force de gravité est calculée en utilisant l’Équation (12.4).

Gravité dans les jeux vidéo

𝐟=m𝐠.\begin{matrix} {\mathbf{f} = m\mathbf{g}.} \\ \end{matrix}

Dans l’Équation (12.4), mm est la masse de l’objet et 𝐠\mathbf{g} est un vecteur constant pointant dans la direction vers le bas. Notez que la force de gravité est proportionnelle à la masse, mais la deuxième loi de Newton dit que l’accélération due à toute force est inversement proportionnelle à la masse. Par conséquent, 𝐠\mathbf{g} spécifie l’accélération due à la gravité pour tous les objets en chute libre. (Remarquez la similitude entre l’Équation (12.4) et la deuxième loi de Newton, 𝐟=m𝐚\mathbf{f} = m\mathbf{a}.)

Le Chapitre 11 vous a dit quelle est la magnitude de 𝐠\mathbf{g} dans le monde réel, mais voyons si nous pouvons la dériver de la loi universelle de la gravitation. La masse de la Terre est approximativement m1=5.98×1024kgm_{1} = 5.98 \times 10^{24}\ {kg}, et son rayon moyen est de 6 371 km :

Calcul de la force de gravité près de la surface de la Terre à partir de la loi de la gravitation universelle

f=Gm1m2d2=(6.673×1011Nm2kg2)(5.98×1024kg)m2(6.371×106m)2(9.83N)m2kg(9.83ms2)m2.\begin{matrix} f & {= G\frac{m_{1}m_{2}}{d^{2}} = \left( 6.673 \times 10^{- 11}\frac{N\ m^{2}}{{kg}^{2}} \right)\frac{(5.98 \times 10^{24}\ {kg})m_{2}}{(6.371 \times 10^{6}\ m)^{2}}} \\ & {\approx (9.83\ N)\frac{m_{2}}{kg} \approx \left( 9.83\ \frac{m}{s^{2}} \right)m_{2}.} \\ \end{matrix}

Mais attendez, cette valeur est plus grande que la valeur de 9.81 citée précédemment ! La raison de la différence est que, tandis que la gravité terrestre fournit une force centripète, sa rotation crée une force centrifuge apparente, qui contrecarre partiellement la gravité. Nous avons calculé la magnitude de l’accélération nécessaire pour empêcher les objets de s’envoler dans l’espace dans la Section 11.8. À l’équateur, la rotation de la Terre exige que la gravité fournisse une accélération centripète de 0.03369ms20.03369\ m\ s^{- 2}. Ainsi, une petite partie de la force de gravité qui fait sentir les objets lourds est contrée par la rotation de la Terre, ce qui les fait paraître plus légers.

En soustrayant cette force centrifuge apparente de la force de gravité, on obtient 9.830.033699.7969.83 - 0.03369 \approx 9.796, mais maintenant la valeur est trop faible, pas les 9.81 que nous cherchions. La raison est que la gravité présente des variations de magnitude à la surface de la Terre. La plus grande source de cette variation est l’accélération centripète que nous venons de calculer ; elle varie avec la latitude. Nous avons calculé sa magnitude en supposant que rr était le rayon de la Terre ; la valeur résultante pour la gravité de 9.796 est en réalité la force correcte de la gravité à l’équateur. À mesure que la latitude augmente et que l’on se déplace vers les pôles, le rayon rr du trajet circulaire (qui a une latitude constante) diminue. Aux pôles, le rayon se réduit à zéro, et les objets tournent mais ne se déplacent pas sur un trajet circulaire. Ainsi, il n’y a pas de force centrifuge apparente aux pôles, et la force de gravité est égale à la valeur de 9.83 que nous avons calculée ci-dessus. La valeur 9.81 est connue comme la « valeur standard » et est la force de gravité moyenne au niveau de la mer à une latitude d’environ 45°.

Maintenant que nous avons longuement discuté de la force de gravité dans le monde réel, parlons de la façon dont ce nombre est souvent totalement non pertinent dans les jeux vidéo. Dans certains genres, comme les simulateurs de course ou de vol, le réalisme est important. Cependant, dans la plupart des autres jeux vidéo, la première loi de la physique des jeux vidéo s’applique. (Hé, Newton a inventé des lois, alors pourquoi pas nous ?)

Première loi de la physique des jeux vidéo

La réalité est surestimée.

Par exemple, les jeux de tir à la première personne sont tristement célèbres pour leurs mauvaises mécaniques de saut. La raison la plus importante est probablement le fait fondamental que vous ne pouvez pas voir vos pieds, pourtant certains jeux en première personne ont pour une raison inexplicable ajouté des puzzles de saut. Mais même de nombreux jeux de tir à la troisième personne qui adoptent une caméra par-dessus l’épaule ont aussi des mécaniques de saut qui ne semblent pas correctes. Pourquoi ? Dans la plupart des jeux de tir à la première personne, quand vous sautez, on vous donne une impulsion initiale de vélocité vers le haut, puis votre position est simulée comme tout autre objet aéroporté dans le monde, en utilisant la gravité, ce qui rend votre mouvement parabolique. Comparez cela à la mécanique de saut dans la plupart des jeux d’action à la troisième personne. La plupart de ces jeux ne simulent pas les sauts en utilisant une accélération constante. Au contraire, votre personnage s’élève presque instantanément après avoir appuyé sur le bouton, et atteint une hauteur maximale très rapidement. Dans de nombreux jeux, le personnage va planer à cette hauteur maximale pendant un certain temps, puis revenir au sol aussi rapidement qu’il s’est élevé, laissant peut-être un cratère derrière lui. Ce n’est clairement pas physiquement précis, mais ce ne l’est pas non plus de pouvoir sauter deux ou trois fois sa propre hauteur, diriger en plein air ou effectuer un double saut. Quand il s’agit de sauter dans les jeux vidéo, la réalité n’est pas seulement surestimée, elle est complètement ignorée. Ça ne semble tout simplement pas correct.

Si simuler une mécanique de saut en utilisant la gravité donne une mauvaise mécanique de saut, simuler une mécanique de saut en utilisant une valeur de 9.8m/s29.8\ m/s^{2} est encore pire. Le problème fondamental est que la plupart des joueurs s’attendent à ce qu’un saut dure un certain temps mais s’attendent également à être capables de sauter à des hauteurs irréalistes. Quand la gravité du monde réel est utilisée pour atteindre ces hauteurs, le joueur est en l’air trop longtemps, et ça donne une sensation de « flottement ». De nombreux jeux de course arcade augmentent également la gravité pour ramener la voiture au sol plus rapidement. Qu’il s’agisse de jeux de course ou de jeux de personnages, le joueur veut reprendre le contrôle complet aussi rapidement que possible, et attendre que la gravité du monde réel les ramène au sol prend généralement trop de temps. Et puis il y a d’autres jeux de course qui utilisent une valeur de gravité inférieure à la valeur du monde réel, pour faciliter des sauts irréalistes à des vitesses de véhicule réalistes.

Il y a aussi des raisons de bidouiller la gravité pour les objets des personnages non joueurs également. Parfois, la gravité du monde réel peut créer une sensation d’« objets en polystyrène » pour les objets simulés en général,9 donc la gravité est augmentée pour qu’un objet se renverse et se mette au repos plus rapidement. Dans d’autres situations, une valeur de gravité artificiellement faible peut rendre un grand objet encore plus massif (surtout accompagné des bons effets sonores), car l’accélération sur Terre est constante et est l’un des rares indices que les humains utilisent instinctivement pour établir une échelle absolue pour les objets à distance.10

Espérons que, en lisant la discussion de conception précédente, vous avez absorbé un message général plutôt que de vous concentrer sur nos opinions spécifiques. Ce qui « semble correct » est une question subjective ; de plus — et c’est le point clé — c’est davantage basé sur les attentes des joueurs que sur la réalité physique. En fin de compte, ce qui compte le plus dans un jeu vidéo n’est pas ce qui se passe dans le CPU ou même à l’écran, mais ce qui se passe dans l’esprit du joueur. Et l’esprit humain est très susceptible à la suggestion. Lors de la création de jeux vidéo, rappelez-vous toujours que la quête du réalisme ne devrait jamais être une fin en soi, mais qu’un jeu vidéo réussi exploitera le réalisme uniquement là où il sert l’objectif ultime, qui est le divertissement. En fait, le réalisme s’oppose souvent à cet objectif. Les créateurs de jeux vidéo (surtout les programmeurs !) confondent souvent ces priorités et finissent par créer une démo technique impressionnante qui n’est pas amusante.

12.2.2Forces de frottement

Si nous prenons un objet tel qu’un bol de pétunias et le faisons glisser le long d’une surface, nous savons qu’il finira par s’arrêter. Nous savons également que si nous plaçons ce bol sur une surface qui n’est pas tout à fait horizontale, il ne glissera pas nécessairement vers le bas à moins que l’angle d’inclinaison ne dépasse un certain seuil. Ces deux phénomènes sont des aspects légèrement différents de la force de frottement. Nous avons l’habitude de penser au frottement comme un ennemi gênant de la productivité, la cause néfaste de l’usure des machines et de voyages plus fréquents à la pompe à essence. Mais gardez à l’esprit que sans frottement, nous ne pourrions pas traverser une pièce à pied ni soulever un enfant (ou un bol de pétunias). Sans frottement, nos voitures pourraient avoir une meilleure efficacité énergétique, mais la transmission ne fonctionnerait pas et les pneus tourneraient sur place au lieu de propulser la voiture vers l’avant.

Ici, nous considérons les deux modes du modèle de frottement sec standard, parfois appelé frottement de Coulomb. Bien que plusieurs penseurs aient contribué à notre compréhension du frottement, Charles-Augustin de Coulomb (1736–1806) est celui qui a donné son nom à la chose. Lorsqu’un objet est au repos sur un autre objet, une certaine quantité de force est nécessaire pour le décoller et le mettre en mouvement. Si moins de force est appliquée à l’objet, la force de frottement repoussera avec une force de contrepartie jusqu’à un certain maximum. Ce type de frottement est connu sous le nom de frottement statique, et il empêche les bols de pétunias posés sur des tables légèrement inclinées de glisser. Une fois que le frottement statique est surmonté et que l’objet est en mouvement, le frottement continue à s’opposer au mouvement relatif des deux surfaces, mais la magnitude de cette force, connue sous le nom de frottement cinétique, est inférieure à celle du frottement statique. Le frottement cinétique est ce qui fait qu’un bol de pétunias finit par s’arrêter après que nous l’avons mis en mouvement.

Le frottement est le résultat d’interactions compliquées au niveau microscopique, et il est donc quelque peu surprenant que son comportement macroscopique puisse être décrit par des équations relativement simples. Considérons d’abord le frottement statique. Comme toute force, le frottement statique est un vecteur. La direction du frottement statique est toujours dans la direction qui s’oppose à toute force qui ferait autrement bouger les objets l’un par rapport à l’autre. Cela peut sembler quelque peu déloyal (« Comment le frottement connaît-il toujours la bonne direction pour pousser ? »), mais rappelons que la force est en réalité le résultat agrégé de nombreuses forces électriques agissant au niveau microscopique. Les forces sont le résultat de liaisons moléculaires qui se sont formées entre les objets lors du contact, et ces liaisons ont besoin d’une force pour être séparées.

Une bonne approximation de la magnitude maximale du frottement statique est calculée avec l’Équation (12.5).

Frottement statique

fs=μsn.\begin{matrix} {f_{s} = \mu_{s}n.} \\ \end{matrix}

La constante sans dimension μs\mu_{s} est connue sous le nom de coefficient de frottement statique, et nn est la magnitude de la force normale. Parlons de chacun d’eux plus en détail.

De notre point de vue, μs\mu_{s} est certainement le plus facile des deux à gérer : il suffit de le chercher dans un tableau ! Le Tableau 12.1 en est un exemple. Notez que nous prenons un peu d’avance et affichons les coefficients pour le frottement statique et cinétique. Ignorez la colonne du frottement cinétique pour l’instant.

Matériau 1 Matériau 2 μs\mu_{s} (Statique) μk\mu_{k} (Cinétique)
Aluminium Acier 0.61 0.47
Cuivre Acier 0.53 0.36
Cuir Métal 0.4 0.2
Caoutchouc Asphalte (sec) 0.9 0.5–0.8
Caoutchouc Asphalte (mouillé) 0.25–0.75
Caoutchouc Béton (sec) 1.0 0.6–0.85
Caoutchouc Béton (mouillé) 0.30 0.45–0.75
Acier Acier 0.80
Acier Téflon 0.04
Téflon Téflon 0.04
Bois Béton 0.62
Bois Métal propre 0.2–0.6
Bois Glace 0.05
Bois Bois 0.25–0.5
Bois (ciré) Neige sèche 0.04

Tableau 12.1Coefficients de frottement statique et cinétique

Bien sûr, quelqu’un doit réellement remplir ces tableaux ! Les méthodes pour obtenir ces données sont intéressantes et assez élégantes, mais elles ne sont pas notre préoccupation principale ici. Ce qui est très important pour nous, c’est que les coefficients de frottement statique et cinétique dépendent des propriétés des deux surfaces en interaction. En d’autres termes, le Tableau 12.1 est indexé non pas par un seul type de surface, mais par une paire de surfaces en interaction. Ainsi, par exemple, bien qu’en utilisant ce tableau nous puissions trouver le coefficient de frottement statique pour le caoutchouc contre l’asphalte, nous ne pouvons pas utiliser cette information pour dire quoi que ce soit sur, par exemple, le caoutchouc contre la glace, ou le bois contre l’asphalte. Le coefficient de frottement statique pour chaque paire de surfaces doit être mesuré expérimentalement en raison de la complexité des interactions microscopiques.

Notez également que l’Équation (12.5) nous donne la force maximale du frottement statique. La force réelle exercée à tout instant correspondra à la magnitude des forces agissant sur les objets qui tendent à induire un mouvement relatif latéral, jusqu’à ce maximum. Une fois ce maximum dépassé, le frottement statique cesse d’opérer, et le frottement cinétique prend le relais.

L’autre facteur dans l’Équation (12.5) est la magnitude de la force normale, qui est la force agissant perpendiculairement aux surfaces qui les empêche de se pénétrer mutuellement. Une situation courante se produit quand un objet (comme un bol de pétunias) repose sur un autre objet (comme une table). La force normale dans ce cas est simplement la force nécessaire pour contrecarrer la gravité. Pour être plus précis, c’est la force nécessaire pour contrecarrer la composante de la gravité qui agit perpendiculairement aux surfaces et qui cherche à les écraser l’une contre l’autre. Si la table est inclinée, nous pouvons séparer la gravité en une composante normale et une composante latérale, comme le montre la Figure 12.4. (Dans un ordinateur, on décrirait probablement l’orientation de la table avec un vecteur normal, et on utiliserait le produit scalaire pour séparer la gravité en composantes relative et normale, comme nous l’avons décrit dans la Section 2.11.2.) Puisque le bol et la table n’accélèrent pas l’un par rapport à l’autre, nous savons que la force normale de la table poussant contre le bol doit être exactement égale à la composante normale de la force de gravité tirant le bol vers la table.

image

Figure 12.4 Diagrammes du corps libre d’un bol de pétunias sur une table à divers angles d’inclinaison.

La Figure 12.4 montre plusieurs diagrammes du corps libre de bols de pétunias identiques reposant sur des tables à divers angles d’inclinaison. Remarquez que dans chaque figure, la force de gravité agissant sur le bol, étiquetée 𝐠\mathbf{g}, est la même. Les composantes normale et latérale de la gravité ont été distinguées en bleu. La force réelle de frottement statique est le vecteur noir étiqueté fsf_{s}. À gauche, la quantité maximale de frottement disponible est étiquetée « max fsf_{s} » ; dans les images du milieu et de droite, le frottement maximal est appliqué.

Dans le premier scénario, il y a plus de frottement disponible que nécessaire pour arrêter le glissement. Cependant, à mesure que l’angle d’inclinaison augmente, la composante normale de la gravité diminue, ce qui réduit la quantité de frottement disponible. Pendant ce temps, à mesure que la composante perpendiculaire de la gravité diminue, la composante latérale augmente, ce qui pousse le bol à glisser. La force de frottement statique doit contrecarrer cette composante latérale si le bol doit rester en équilibre. L’image centrale montre l’angle critique auquel la force latérale de la gravité est exactement égale à la quantité maximale de frottement. À droite, on imagine que nous avons incliné la table tout en maintenant le bol en place, puis nous avons lâché le bol. Le frottement maximal disponible est appliqué, mais il est inférieur à ce qui était disponible dans l’image centrale en raison de la diminution de la force normale, et n’est pas suffisant pour surmonter la composante latérale augmentée de la gravité. Juste après cette image, le frottement a basculé du mode statique au mode cinétique, le bol a glissé de la table et s’est brisé, et un robot de nettoyage de dessin animé s’est précipité par une petite porte dans le mur pour nettoyer le désordre.

Le calcul du frottement cinétique est essentiellement identique au frottement statique. La seule différence est que nous remplaçons l’indice ss par un kk.

Frottement cinétique

fk=μkn.\begin{matrix} {f_{k} = \mu_{k}n.} \\ \end{matrix}

La direction de la force de frottement cinétique est toujours opposée au mouvement relatif des surfaces. (Rappelons que selon la troisième loi de Newton, il y a en réalité deux forces, l’une poussant contre le bol et l’autre contre la table, et elles sont dans des directions opposées.) Comme nous l’avons dit plus tôt, le coefficient de frottement cinétique est généralement inférieur au coefficient de frottement statique. Ainsi, si nous augmentons l’angle de la table très lentement de façon que le frottement statique soit juste surmonté, les pétunias commenceront à accélérer, en fonction de cette différence entre le frottement cinétique et statique. La contribution principale de Coulomb à la théorie, parfois appelée loi de Coulomb sur le frottement, était que la force de frottement cinétique ne dépend pas des vitesses relatives des surfaces, donc, contrairement au frottement statique, il n’y a pas de distinction entre la force effective et la force maximale.

Notez que la quantité de surface de contact entre les deux objets n’apparaît pas dans les Équations (12.5) ou (12.6). Par exemple, disons qu’on rempote les pétunias dans un bol plus haut avec une empreinte plus petite mais le même poids. Nous avons réduit la surface de contact entre le bol et la table, mais toutes les forces représentées dans les diagrammes du corps libre de la Figure 12.4 restent les mêmes. Faire cela ne changerait pas l’angle auquel le bol commencerait à glisser ! Bien qu’il puisse sembler qu’une plus grande surface donnerait aux objets plus de prise, cela est compensé par la diminution de la pression, car la même force normale totale est maintenant distribuée sur une zone de contact plus petite. Or, un bol très haut peut commencer à basculer avant de commencer à glisser. Mais c’est une question de rotation, l’augmentation de la tendance à tourner étant causée par une augmentation du bras de levier entraînant un couple plus grand. Nous couvrons ces questions dans la Section 12.5.

12.2.3Forces de ressort

Il y a encore une autre classe de force suffisamment importante pour être discutée dans sa propre section : les forces exercées par un ressort écarté de sa position d’équilibre. Pourquoi discutons-nous de cette classe de force certes particulière ? Les ressorts sont-ils soudainement devenus des caractéristiques proéminentes dans les jeux vidéo et leur simulation précise une fonctionnalité de gameplay importante ? En fait, oui. Même si vous ne voyez pas beaucoup de ressorts littéraux dans un jeu vidéo, il y a probablement de nombreux « ressorts virtuels » à l’œuvre. Les ressorts présentent un comportement général qui est très utile pour imposer des contraintes, empêcher les objets de se pénétrer, etc.

Cette section présente les équations classiques du mouvement pour les oscillations amorties et non amorties. Elle couvre d’abord les oscillations non amorties, puis les amorties. Il est souvent le cas dans un jeu vidéo que les programmeurs utilisent un ressort virtuel (souvent sous la forme d’un système ressort-amortisseur) alors qu’en réalité ce qu’ils utilisent est un système de contrôle. Il y a certains avantages à avoir quand la nature physique du problème est abandonnée et que nous le pensons en termes purement mathématiques. (En fait, souvent le problème n’était jamais vraiment physique au départ, et n’a été refondu en termes physiques que pour que l’appareillage ressort-amortisseur puisse être appliqué.)

Comme la loi du frottement, la loi de force pour les ressorts est une approximation étonnamment précise du comportement macroscopique qui résulte d’interactions microscopiques compliquées. Considérons un ressort avec une extrémité fixe et l’autre libre de se déplacer dans une dimension. Lorsque le ressort est à l’équilibre sans forces externes dessus, il a une longueur naturelle, appelée la longueur au repos. Si nous étirons le ressort, il tirera pour essayer de retrouver sa longueur au repos. De même, si nous comprimons le ressort, il poussera en retour. Mais comment savoir quelle est la force dans chaque cas ? C’est ce que la loi de force nous dit.

La loi de force pour les ressorts est connue sous le nom de loi de Hooke, et elle dit essentiellement que la magnitude de la force de restauration est proportionnelle à la différence entre la longueur actuelle et la longueur au repos (à condition que la force ne dépasse pas une valeur appelée la limite élastique, qui varie selon le matériau utilisé pour construire le ressort). Si nous laissons ll être la longueur actuelle du ressort et lrestl_{rest} désigner la longueur au repos, alors la magnitude de la force de restauration frf_{r} est calculée par l’Équation (12.7).

Loi de Hooke pour les forces de ressort

fr=k(lrestl).\begin{matrix} {f_{r} = k(l_{rest} - l).} \\ \end{matrix}

La constante kk est connue sous le nom de constante de ressort et décrit essentiellement la « rigidité » du ressort. La constante n’est pas sans dimension. Pour que l’Équation (12.7) ait un sens, nous devons avoir

[ML/T2]=k[L],[ML/T2]/[L]=k,[M/T2]=k,\begin{matrix} {\lbrack ML/T^{2}\rbrack} & {= k\lbrack L\rbrack,} \\ {\lbrack ML/T^{2}\rbrack/\lbrack L\rbrack} & {= k,} \\ {\lbrack M/T^{2}\rbrack} & {= k,} \\ \end{matrix}

ou vous pouvez simplement penser à kk comme ayant des unités de « unité de force par unité de longueur. »

La chose vraiment intéressante à propos des ressorts, c’est comment ils se comportent dans le temps. Pour le voir, reformulons la loi de Hooke d’une façon qui se concentre sur la cinématique d’une particule sur laquelle agissent des forces de restauration. Plus précisément, nous nous intéressons aux fonctions de position, vélocité et accélération d’une particule.

Les choses deviennent plus faciles si on adopte un référentiel où la position x=0x = 0 désigne la position « au repos », où il n’y a pas de forces de restauration. De plus, puisque nous nous intéressons à l’accélération de la particule plutôt qu’aux forces agissant sur elle, nous introduirons une constante K=k/mK = k/m, et comme KK contient à la fois la constante de ressort kk et la masse de la particule mm, elle mesure la capacité du ressort à accélérer la particule spécifique qui nous intéresse. Avec ces changements de notation, nous pouvons réécrire l’Équation (12.7) comme

Accélération due à la loi de Hooke

a(t)=Kx(t).\begin{matrix} {a(t) = - Kx(t).} \\ \end{matrix}

Vous devriez vous convaincre que c’est équivalent à l’Équation (12.7) avant de continuer.

L’Équation (12.8) fait une déclaration sur la relation entre la fonction position et la fonction accélération ; mais ce que nous voulons vraiment, c’est la fonction x(t)x(t) elle-même. Des équations comme celle-ci sont appelées des équations différentielles ; elles décrivent la relation entre une fonction inconnue (dans ce cas, x(t)x(t)) et une ou plusieurs de ses dérivées (rappelons que l’accélération est la deuxième dérivée de la position). « Résoudre » une équation différentielle consiste à trouver la fonction inconnue x(t)x(t) qui satisfait l’équation. Nous avons réussi à effleurer à peine la surface du calcul différentiel et intégral de base dans ce livre, donc nous ne pourrons pas couvrir les techniques de résolution des équations différentielles. Heureusement, vous n’avez pas besoin de connaître les équations différentielles pour vérifier qu’une fonction x(t)x(t) proposée est une solution — cela ne nécessite que la capacité de différentier la fonction x(t)x(t). Comme il s’avère, cela sera suffisant dans les rares cas où nous nous heurtons à des équations différentielles dans ce livre.

Nous pouvons faire une assez bonne supposition sur la forme de x(t)x(t) en regardant un graphe. Nous ne faisons pas de raisonnement circulaire ici ; nous n’avons pas besoin de connaître x(t)x(t) pour obtenir un graphe, tout ce dont nous avons besoin est un ressort avec une sorte de dispositif de marquage attaché.11 Un tel graphe est présenté dans la Figure 12.5.

image

Figure 12.5 Le graphe du mouvement d’un ressort. Tiens, ça ressemble à quelque chose de connu…

Cette fonction devrait vous sembler familière : c’est le graphe de la fonction cosinus. Voyons ce qui se passe si on essaie simplement x(t)=cos(t)x(t) = \cos(t) comme fonction position. En différentiant deux fois pour obtenir les fonctions vélocité et accélération (rappelons que nous avons appris la dérivée des fonctions sinus et cosinus dans la Section 11.4.6), on obtient

Proche, mais pas tout à fait correct

x(t)=cos(t),x˙(t)=sin(t),x¨(t)=cos(t),\begin{matrix} {x(t)} & {= \cos(t),} \\ {\overset{˙}{x}(t)} & {= - \sin(t),} \\ {\overset{¨}{x}(t)} & {= - \cos(t),} \\ \end{matrix}

ce qui est très proche, mais nous manquons le facteur KK.

Pour comprendre où KK devrait apparaître dans x(t)x(t), considérons ce qui se passe au graphe de x(t)x(t) quand on change la valeur de KK. En d’autres termes, on répète notre expérience physique et on fait varier la rigidité du ressort ou la masse du dispositif de marquage attaché à l’extrémité du ressort. Le résultat est que les valeurs plus grandes de KK (ressorts plus rigides ou dispositifs de marquage moins massifs) donnent un graphe horizontalement « comprimé » : la fréquence d’oscillation est augmentée. De même, des valeurs plus petites de KK font osciller le ressort plus lentement, et le graphe est dilaté. De plus, on observe que la fréquence est proportionnelle à la racine carrée de KK — quand on augmente KK par un facteur de quatre, la fréquence double. Cela nous donne un indice sur l’endroit où KK devrait apparaître, puisque tout ce que nous faisons est de mettre à l’échelle l’axe du temps.

Une solution, mais est-ce la seule ?

x(t)=cos(Kt),x˙(t)=Ksin(Kt),x¨(t)=Kcos(Kt).\begin{matrix} {x(t)} & {= \cos(\sqrt{K}\, t),} \\ {\overset{˙}{x}(t)} & {= - \sqrt{K}\sin(\sqrt{K}\, t),} \\ {\overset{¨}{x}(t)} & {= - K\cos(\sqrt{K}\, t).} \\ \end{matrix}

On vérifie que c’est une solution à l’équation différentielle en la substituant dans l’Équation (12.8). En se rappelant que a(t)=x¨(t)a(t) = \overset{¨}{x}(t), on a

a(t)=Kx(t),Kcos(Kt)=K(cos(Kt)).\begin{matrix} {a(t)} & {= - Kx(t),} \\ {- K\cos(\sqrt{K}\, t)} & {= - K(\cos(\sqrt{K}\, t)).} \\ \end{matrix}

La quantité K\sqrt{K} est la fréquence angulaire et apparaît assez souvent pour qu’on trouve utile d’introduire la notation

Fréquence angulaire

ω=K=k/m,\omega = \sqrt{K} = \sqrt{k/m},

et on peut écrire la solution comme

x(t)=cos(ωt);\begin{matrix} {x(t)} & {= \cos(\omega t);} \\ \end{matrix}

d’où la raison du nom « fréquence angulaire » devient évidente.

Ainsi, nous avons trouvé l’équation cinématique pour le ressort. Ou peut-être devrions-nous dire que nous avons trouvé une solution à l’équation différentielle. Il y a quelques degrés de liberté inhérents au mouvement du ressort qui ne sont pas pris en compte dans l’Équation (12.9). Premièrement, nous ne tenons pas compte du déplacement maximum, connu sous le nom d’amplitude des oscillations et noté AA. Notre équation a toujours une amplitude de 1. Deuxièmement, nous supposons que x(0)=Ax(0) = A, ce qui signifie que le ressort a initialement été étiré au déplacement maximum AA et relâché avec une vélocité initiale nulle. Cependant, en général, on pourrait l’avoir tiré à un déplacement x0Ax_{0} \neq A et puis lui avoir donné une poussée pour qu’il ait une vélocité initiale v0v_{0}.

Il semblerait que nous ayons trois variables supplémentaires qui doivent être intégrées dans notre équation si elle doit être complètement générale. Comme il s’avère, les trois variables que nous venons de discuter — l’amplitude, la position initiale et la vélocité initiale — sont interdépendantes. Si on en choisit deux, la valeur de la troisième est déterminée. Nous garderons AA tel quel, mais nous remplacerons x0x_{0} et v0v_{0} par le déphasage θ0\theta_{0}, qui décrit où en est le ressort dans son cycle à t=0t = 0. Les ajustements du déphasage ont l’effet simple de décaler le graphe horizontalement sur l’axe du temps. En ajoutant ces deux variables, nous arrivons à la solution générale, les équations de l’oscillation harmonique simple.

Mouvement harmonique simple

x(t)=Acos(ωt+θ0),x˙(t)=Aωsin(ωt+θ0),x¨(t)=Aω2cos(ωt+θ0).\begin{matrix} {x(t)} & {= A\cos(\omega t + \theta_{0}),} \\ {\overset{˙}{x}(t)} & {= - A\omega\sin(\omega t + \theta_{0}),} \\ {\overset{¨}{x}(t)} & {= - A\omega^{2}\cos(\omega t + \theta_{0}).} \\ \end{matrix}

Faisons quelques observations maintenant. Premièrement, rappelons que les fonctions sinus et cosinus sont simplement des versions décalées l’une de l’autre : sin(t+π/2)=cos(t)\sin(t + \pi/2) = \cos(t). Ainsi, nous aurions pu écrire x(t)x(t) en utilisant le sinus au lieu du cosinus, le choix étant principalement une question de préférence et un ajustement de la phase de π/2\pi/2. Le terme « sinusoïdal » peut être utilisé pour désigner la forme des fonctions sinus et cosinus, et nous l’utilisons quand l’une ou l’autre des fonctions convient.

Deuxièmement, considérons la fréquence d’oscillation. Les fonctions sinus et cosinus ont une période de 2π2\pi ; ainsi l’oscillateur effectuera un cycle complet dans le temps qu’il faut pour que ωt\omega t augmente de 2π2\pi. La fréquence angulaire ω\omega est mesurée en radians par unité de temps, mais on peut également mesurer la fréquence FF, qui est en cycles par unité de temps, comme

Fréquence du mouvement harmonique simple

F=ω2π=K2π=12πkm.F = \frac{\omega}{2\pi} = \frac{\sqrt{K}}{2\pi} = \frac{1}{2\pi}\sqrt{\frac{k}{m}}.

Remarquons que la fréquence d’oscillation dépend uniquement du rapport entre la rigidité du ressort et la masse. En particulier, elle ne dépend pas du déplacement initial x0x_{0} : si on étire davantage le ressort avant de le lâcher, l’amplitude augmente, mais la fréquence ne changera pas.

Dans de nombreuses situations, la fréquence est le nombre important que nous souhaitons contrôler. C’est particulièrement le cas pour les « ressorts virtuels », qui sont en réalité des systèmes de contrôle déguisés. Dans ces situations, nous n’avons pas besoin de nous encombrer de constantes de ressort ou de masses, et on peut écrire l’équation du mouvement directement en termes de fréquence, comme

Mouvement harmonique simple en termes de fréquence

x(t)=Acos(2πFt+θ0).x(t) = A\cos(2\pi Ft + \theta_{0}).

Jusqu’à présent, nous étudions une situation physiquement inexistante dans laquelle la force de restauration est la seule force présente, et le ressort oscillera indéfiniment. En réalité, il y a généralement au moins deux forces supplémentaires intéressantes. La première de ces forces est une force externe, parfois appelée la force d’excitation, qui agit comme l’« entrée » du système et provoque le début du mouvement. L’autre force est le frottement que tout ressort réel connaît, ce qui finit par faire cesser le mouvement. Le terme général utilisé pour décrire tout effet qui tend à réduire l’amplitude d’un système oscillatoire est l’amortissement, et on appelle oscillation dans laquelle l’amplitude décroît avec le temps une oscillation amortie. Les forces d’amortissement sont particulièrement importantes pour nos besoins, alors discutons-en plus en détail.

Le modèle le plus courant pour la force d’amortissement est un modèle simple qui agit proportionnellement à la vélocité mais dans la direction opposée, similaire à la loi du frottement. (Contrairement aux lois du frottement de la section précédente, nous n’avons pas la question de la force normale.) La force est simplement

Force d’amortissement

fd=cx˙,f_{d} = - c\overset{˙}{x},

fdf_{d} indique la magnitude et la direction instantanées de la force d’amortissement, x˙\overset{˙}{x} est la vélocité instantanée, et cc est une constante qui décrit la viscosité, la rugosité, etc.

La force d’amortissement a une forme extrêmement simple, mais tout comme avec la force de restauration, les choses deviennent intéressantes lorsqu’on étudie le mouvement dans le temps. Qualitativement, on peut faire quelques prédictions de base sur la façon dont l’oscillation amortie d’un ressort différerait de l’oscillation non amortie du même ressort. La prédiction la plus évidente est que nous nous attendrions à ce que l’amplitude d’oscillation décroisse avec le temps, ce qui signifie que le déplacement maximum au sommet de chaque cycle est un peu moins que le précédent. Comme la force de frottement, l’amortissement tend à retirer de l’énergie du système. La deuxième observation n’est que légèrement moins évidente : comme l’amortissement en général ralentit la vélocité de la masse à l’extrémité du ressort, nous nous attendrions à ce que la fréquence d’oscillation soit réduite par rapport à l’oscillation non amortie. Ces deux prédictions intuitives s’avèrent correctes, bien que, bien sûr, pour être plus précis, nous devons analyser les mathématiques.

En combinant les forces de restauration et d’amortissement, la force nette peut s’écrire comme

fnet=fr+fd=kxcx˙.f_{net} = f_{r} + f_{d} = - kx - c\overset{˙}{x}.

Pour dériver l’équation du mouvement, nous aurons besoin d’accélérations, pas de forces. En appliquant la deuxième loi de Newton et en divisant les deux membres par la masse, on obtient

x¨=fnetm=kmxcmx˙,\begin{matrix} {\overset{¨}{x} = \frac{f_{net}}{m} = - \frac{k}{m}x - \frac{c}{m}\overset{˙}{x},} \\ \end{matrix}

Ensuite, nous réécrivons cela en termes de deux nouvelles quantités. La première quantité, ω0\omega_{0}, est la fréquence angulaire non amortie et n’est pas vraiment nouvelle. Elle est identique au ω=k/m\omega = \sqrt{k/m} introduit précédemment ; nous ajoutons juste l’indice zéro pour souligner qu’il s’agit de la fréquence qui se produirait sans amortissement plutôt que la fréquence réelle. (Rappelons que notre prédiction est que la fréquence réelle sera plus lente d’une certaine façon.)

La deuxième quantité s’appelle le rapport d’amortissement, à ne pas confondre avec le coefficient d’amortissement cc. Le rapport d’amortissement est traditionnellement noté ζ\zeta, la lettre grecque zêta, qui a un aspect bizarre et nécessite quelques exercices pour être écrite à la main. Le rapport d’amortissement est lié au coefficient d’amortissement, à la masse et à la fréquence angulaire non amortie par la formule

Rapport d’amortissement

ζ=c2mk=c2mω0.\zeta = \frac{c}{2\sqrt{mk}} = \frac{c}{2m\omega_{0}}.

Dans un instant, quand nous expliquerons la signification qualitative de ζ\zeta, l’utilité de cette formule arbitraire deviendra évidente.

En substituant la fréquence non amortie ω0\omega_{0} et le rapport d’amortissement ζ\zeta dans l’Équation (12.11), on a

Équation différentielle pour l’oscillation harmonique amortie

x¨=ω02x2ζω0x˙.\begin{matrix} {\overset{¨}{x} = - \omega_{0}^{2}x - 2\zeta\omega_{0}\overset{˙}{x}.} \\ \end{matrix}

Les lecteurs ayant une formation en équations différentielles devraient reconnaître l’Équation (12.12) comme une équation différentielle linéaire homogène du second ordre à coefficients constants, qui est l’une des équations différentielles les plus agréables auxquelles on pourrait espérer avoir affaire, ce qui signifie qu’on peut effectivement la résoudre avec un crayon et du papier. Les lecteurs sans cette formation ne doivent pas s’inquiéter, car cela ne sera pas nécessaire pour comprendre la réponse, vers laquelle nous allons maintenant avancer rapidement en sautant la dérivation. Il y a trois cas distincts : sous-amortissement, amortissement critique et sur-amortissement.

Quand 0ζ<10 \leq \zeta < 1, nous disons que le système est sous-amorti. Dans ce cas, comme nous l’avons prédit, le mouvement continuera à osciller indéfiniment avec une amplitude qui décroît exponentiellement dans le temps. L’équation qui décrit ce mouvement est

Équation cinématique pour un système sous-amorti

x(t)=(k1cos(ωdt)+k2sin(ωdt))eζω0t,\begin{matrix} {x(t) = \left( k_{1}\cos(\omega_{d}t) + k_{2}\sin(\omega_{d}t) \right)e^{- \zeta\omega_{0}t},} \\ \end{matrix}

ωd\omega_{d} est la fréquence réelle de l’oscillation amortie et est liée à la fréquence non amortie ω0\omega_{0} par

Fréquence angulaire amortie

ωd=ω01ζ2.\begin{matrix} {\omega_{d} = \omega_{0}\sqrt{1 - \zeta^{2}}.} \\ \end{matrix}

Les constantes k1k_{1} et k2k_{2} sont déterminées par la position et la vélocité initiales :

k1=x(0),k2=ζω0x(0)+x˙(0)ωd.\begin{matrix} k_{1} & {= x(0),} & k_{2} & {= \frac{\zeta\omega_{0}x(0) + \overset{˙}{x}(0)}{\omega_{d}}.} \\ \end{matrix}

L’utilisation de ζ=0\zeta = 0 produit une oscillation non amortie, et l’Équation (12.13) est équivalente à l’Équation (12.10).

Votre bon sens vous dit qu’à mesure qu’on augmente le rapport d’amortissement, la fréquence d’oscillation diminue ; en consultant l’Équation (12.14), on voit qu’à ζ=1\zeta = 1, la fréquence disparaît complètement. À ce seuil, connu sous le nom d’amortissement critique, le comportement du système change qualitativement. Le système n’oscille plus, mais décroît plutôt exponentiellement. L’équation cinématique dans cette situation est

Équation du mouvement à l’amortissement critique

x(t)=(k1+k2t)eω0t,\begin{matrix} {x(t) = \left( k_{1} + k_{2}t \right)e^{- \omega_{0}t},} \\ \end{matrix}

k1k_{1} et k2k_{2} sont à nouveau déterminés par les conditions initiales :

k1=x(0),k2=ω0x(0)+x˙(0).\begin{matrix} k_{1} & {= x(0),} & k_{2} & {= \omega_{0}x(0) + \overset{˙}{x}(0).} \\ \end{matrix}

L’amortissement critique est juste la bonne quantité pour que le système décroisse aussi rapidement que possible sans oscillation. Si l’amortissement est diminué, le système est sous-amorti, comme décrit précédemment, et oscillera. Si l’amortissement est augmenté, le système est sur-amorti ; il n’oscillera pas, et le taux de décroissance sera plus lent que le taux à l’amortissement critique. La Figure 12.6 montre comment la valeur d’amortissement affecte le comportement d’un système.

image

Figure 12.6Systèmes non amorti, sous-amorti et critiquement amorti.

Maintenant que nous avons passé en revue les équations classiques que l’on peut trouver dans n’importe quel manuel de physique ou sur wikipedia.org, disons quelques mots sur la façon dont les systèmes ressort-amortisseur sont utilisés dans les jeux vidéo comme systèmes de contrôle. En général, un système de contrôle12 prend comme entrée une fonction du temps représentant une valeur cible. Par exemple, notre code de caméra pourrait calculer une position de caméra désirée basée sur la position du joueur à chaque frame ; du code d’IA pourrait déterminer un angle de visée exact pour un ennemi ; on pourrait avoir une vélocité désirée du personnage joueur basée sur la quantité instantanée de déflexion du joystick ; ou on pourrait avoir une position désirée en espace écran pour un effet de surbrillance, basée sur le choix actuellement sélectionné dans un menu. Dans tous les cas, la valeur actuelle du signal d’entrée est connue sous le nom de point de consigne dans la terminologie des systèmes de contrôle. Le point de consigne est essentiellement la position de repos du ressort, et le signal d’entrée est comme si quelqu’un prenait l’autre extrémité du ressort et la tirait dans tous les sens. (C’est donc similaire à une force d’excitation, sauf que généralement ce qu’on a est une fonction décrivant une position plutôt qu’une force ou une accélération.)

Le rôle de tout système de contrôle est de prendre ce signal d’entrée et de produire un signal de sortie. Pour revenir à nos exemples précédents, le signal de sortie pourrait être la position réelle de la caméra à utiliser pour chaque frame, ou l’angle d’animation réel que l’ennemi utilisera pour viser l’arme, la vélocité réelle du personnage joueur, ou la position réelle en espace écran de la surbrillance. Pour de nombreux systèmes de contrôle, la position réelle et le point de consigne ne sont pas utilisés ; seule l’erreur est nécessaire. Bien sûr, une question évidente est : si on connaît la valeur « désirée », pourquoi ne pas l’utiliser directement ? Parce que c’est trop saccadé. De la même façon que les amortisseurs et les ressorts d’une voiture (un exemple classique d’un système ressort-amortisseur) ne transmettent pas directement l’élévation de la route à la voiture, un système de contrôle dans un jeu vidéo est souvent conçu pour « lisser les bosses » causées par des changements d’état soudains qui pourraient faire pivoter la caméra vers une nouvelle position ou faire tressauter le joueur en mouvement. La caméra ou la surbrillance en espace écran sont des exemples non physiques dans lesquels la quantité de « masse » n’est pas vraiment appropriée et est abandonnée. Mais les équations différentielles sont toujours les mêmes, et elles ont la même solution. Dépouillés de la métaphore du ressort, nous nous retrouvons avec ce qui est connu sous le nom de contrôleur PD. Le P signifie proportionnel, et c’est la partie ressort du contrôleur, car il agit proportionnellement à l’erreur actuelle. L’amortisseur est la partie D, qui signifie dérivée (derivative en anglais), car l’action de l’amortisseur à tout instant est proportionnelle à la dérivée (la vélocité). Les contrôleurs PD (et leur cousin plus robuste, le contrôleur PID, où le I signifie intégrale et sert à éliminer l’erreur en régime permanent) sont des outils largement applicables ; ce sont des outils d’ingénierie standard depuis des décennies (des siècles ?) et sont bien compris. Néanmoins, ils sont l’une des roues les plus fréquemment réinventées dans la programmation de jeux vidéo.

En pratique, le code de simulation est une intégration d’Euler très simple de l’Équation (12.11). Comme indiqué dans la Section 12.6.3, c’est une façon élaborée de décrire du code qui ressemble à la Liste 12.1.

struct SpringDamper {
    float value;    // valeur actuelle
    float setPoint; // valeur « désirée »
    float velocity; // « vélocité » actuelle (dérivée de value)
    float c;        // coefficient d'amortissement
    float k;        // constante de ressort

    // Met à jour la valeur et la vélocité actuelles, en avançant
    // dans le temps de l'intervalle de temps donné
    void update(float dt) {

        // Calcul de l'accélération
        float error = value - setPoint;
        float accel = -error*k - c*velocity;

        // Intégration d'Euler
        velocity += accel*dt;
        value += velocity*dt;
    }
};

Différentes voitures ont des suspensions réglées différemment ; les voitures de sport sont plus « fermes » et les voitures que les retraités aiment conduire sont plus douces. De même, nous réglons nos systèmes de contrôle pour obtenir la réponse souhaitée. Notons que la simulation utilise le kk et le cc de l’Équation (12.11). Cependant, la plupart des gens ne trouvent pas que ce sont les paramètres les plus intuitifs à modifier. Au lieu de cela, le rapport d’amortissement et la fréquence d’oscillation sont utilisés pour l’interface de conception, tandis que kk et cc sont calculés comme des quantités dérivées. Pour régler la fréquence, on pourrait ajuster la version amortie ou non amortie, en utilisant soit la fréquence angulaire soit simplement les Hertz ; les unités et la valeur absolue ne sont souvent pas importantes car la valeur qui convient sera déterminée expérimentalement de toute façon. Pour de nombreux systèmes dans les jeux vidéo, l’oscillation est indésirable, il est donc courant de supposer un système critiquement amorti et de fixer ζ=1\zeta = 1, ne laissant que la « fréquence » (nous la mettons entre guillemets car le système n’oscille pas) comme seule valeur ajustable. Une fréquence plus élevée correspond à la voiture de sport (plus réactive, mais plus saccadée), et une fréquence plus basse est plus douce, mais peut donner une sensation de « latence ».

Notez que les équations cinématiques (12.13) et (12.15) ne sont pas nécessaires directement par la simulation, et nous n’avons pas non plus besoin de distinguer explicitement entre sous-amorti, critiquement amorti ou sur-amorti.

Avant de quitter cette discussion, nous devons mentionner que les systèmes du second ordre que nous avons décrits ici ne sont certainement pas le seul type de système de contrôle, ni même le plus simple, mais ils se comportent bien dans un très large ensemble de circonstances et sont faciles à implémenter et à régler. Un autre système de contrôle couramment utilisé est un simple retard du premier ordre, x˙=kx\overset{˙}{x} = kx, sous lequel l’erreur décroît exponentiellement. C’est similaire à un système du second ordre critiquement amorti, mais avec une réponse un peu plus saccadée à un changement soudain du point de consigne. Une autre technique importante et courante consiste à « poursuivre » le point de consigne à une vélocité fixe. Un filtre est une autre grande classe de système de contrôle, dans lequel la sortie est calculée en prenant une combinaison linéaire de points de consigne ou de valeurs sur les frames précédentes.

12.3Quantité de mouvement

Disons que la boîte de Moe de la Section 12.1.3 a une masse mm, et qu’à un certain instant nous l’observons se déplaçant avec une vélocité 𝐯\mathbf{v}. Arrivant tard dans l’histoire, nous ne pouvons pas dire quelle magnitude de forces a été utilisée pour atteindre ce mouvement, ni combien de temps les forces ont été appliquées, ni quelle était l’histoire de la vélocité de la boîte. Par exemple, il pourrait se faire que la boîte ait été accélérée à la suite d’une force nette constante 𝐟\mathbf{f} appliquée pendant une durée Δt\Delta t. Mais nous n’avons aucun moyen de connaître les valeurs de 𝐟\mathbf{f} et Δt\Delta t. Une grande force a-t-elle été utilisée pendant une courte durée, ou une petite force pendant une durée plus longue ? En fait, nous n’avons aucune raison de supposer que la force était constante du tout ! Moe aurait pu donner un bon coup à la boîte et la mettre en mouvement, puis lui en donner un autre pour l’accélérer.

Bien que nous ne connaissions pas l’historique exact des poussées de Moe, nous savons ce qu’était le « total », dans le sens qui va être décrit. Supposons que Moe ait fait une poussée avec une force constante 𝐟\mathbf{f} appliquée pendant une durée Δt\Delta t. Alors, selon la deuxième loi de Newton, l’accélération était 𝐚=𝐟/m\mathbf{a} = \mathbf{f}/m. En supposant que la vélocité initiale était nulle, nous savons que

𝐯=𝐚Δt.\mathbf{v} = \mathbf{a}\,\Delta t.

En substituant 𝐚=𝐟/m\mathbf{a} = \mathbf{f}/m et en réarrangeant, on obtient

Deux façons de penser à la quantité de mouvement

𝐯=(𝐟/m)Δt,m𝐯=𝐟Δt.\begin{matrix} \mathbf{v} & {= (\mathbf{f}/m)\,\Delta t,} \\ {m\mathbf{v}} & {= \mathbf{f}\,\Delta t.} \\ \end{matrix}

Les membres gauche et droit de l’Équation (12.16) illustrent deux façons différentes de penser au concept important de quantité de mouvement. La quantité de mouvement est la bonne grandeur à suivre pour quantifier le « montant total de poussée ».

Faisons une analyse dimensionnelle sur l’Équation (12.16), d’abord simplement pour vérifier qu’elle a un sens physique — il n’est pas intuitivement évident que ces deux produits porteraient la même signification physique — et aussi pour voir quelles devraient être les unités de la quantité de mouvement :

m𝐯=𝐟Δt,M(L/T)=(ML/T2)T,ML/T=ML/T.\begin{matrix} {m\mathbf{v}} & {= \mathbf{f}\,\Delta t,} \\ {M(L/T)} & {= (M\! L/T^{2})\, T,} \\ {M\! L/T} & {= M\! L/T.} \\ \end{matrix}

Notons que la quantité de mouvement est une grandeur vectorielle, ayant à la fois une magnitude et une direction.

Pour comprendre ce qu’est la quantité de mouvement, regardons les deux membres de l’Équation (12.16). Considérons d’abord le membre gauche, qui interprète la quantité de mouvement comme un produit de masse et de vélocité. En fait, on peut trouver l’Équation (12.17) dans presque tous les manuels de physique.

Quantité de mouvement comme produit de masse et de vélocité

𝐏=m𝐯.\begin{matrix} {\mathbf{P} = m\mathbf{v}.} \\ \end{matrix}

La variable 𝐏\mathbf{P} est la variable traditionnelle utilisée pour représenter la quantité de mouvement. (Malgré la majuscule, 𝐏\mathbf{P} est une grandeur vectorielle. Nous utilisons 𝐏\mathbf{P} majuscule pour éviter la confusion avec la notation 𝐩\mathbf{p}, que nous utilisons parfois pour désigner la position d’une particule.)

L’Équation (12.17) indique clairement que la quantité de mouvement d’un objet est une propriété instantanée d’un objet. En disant cela, nous voulons dire que nous pouvons définir sa valeur en ne connaissant que son état instantané, sans nous préoccuper de comment il y est parvenu. que son état instantané, sans se préoccuper de comment il y est parvenu. De plus, si vous pensez à la quantité de mouvement comme au « montant total de poussée » nécessaire pour arrêter un objet en mouvement, il est certainement intuitivement séduisant qu’elle devrait être le produit de la masse et de la vélocité. Si l’objet est petit et se déplace lentement (un crayon roulant sur un bureau), une petite force totale suffira. S’il est rapide (une balle de revolver) ou lourd (une voiture que quelqu’un a laissée garée sur une pente sans le frein à main), une plus grande quantité sera nécessaire. S’il est rapide et lourd (un avion qui atterrit), vous feriez mieux de vous écarter. L’équation 𝐏=m𝐯\mathbf{P} = m\mathbf{v} quantifie l’idée de « difficile à arrêter ».

Bien que l’équation mémorable 𝐏=m𝐯\mathbf{P} = m\mathbf{v} du membre gauche de l’Équation (12.16) soit peut-être la façon la plus courante d’expliquer la quantité de mouvement, le membre droit fournit en réalité le plus d’informations. La relation 𝐏=𝐟Δt\mathbf{P} = \mathbf{f}\,\Delta t montre que la quantité de mouvement, en tant que produit de force et de temps, est ce qui résulte lorsqu’une force agit dans le temps. C’est ce que signifiait la phrase approximative « montant total de poussée ». Nous ne voulons pas dire que la magnitude de la force de poussée elle-même change ou s’accumule, mais plutôt que l’application continue d’une force nette entraîne toujours une accumulation de quantité de mouvement (ou une réduction de la quantité de mouvement, lorsque les directions de la force et de la quantité de mouvement sont opposées).

En fait, si nous généralisons l’équation 𝐏=𝐟Δt\mathbf{P} = \mathbf{f}\,\Delta t, nous pouvons découvrir une relation encore plus profonde entre force et quantité de mouvement. Et si, au lieu de pousser la boîte avec une force constante, Moe la poussait avec une force variant dans le temps ? Alors nous pouvons exprimer l’accélération à tout instant tt comme

𝐚(t)=𝐟(t)/m,\begin{matrix} {\mathbf{a}(t) = \mathbf{f}(t)/m,} \\ \end{matrix}

ce qui est simplement la deuxième loi de Newton à laquelle nous avons ajouté la notation « (t)(t) » pour être plus explicite que 𝐚\mathbf{a} et 𝐟\mathbf{f} varient avec le temps. Nous avons appris dans le Chapitre 11 que si on intègre l’accélération par rapport au temps, on obtient la vélocité en fonction du temps :

La vélocité est l’intégrale temporelle de l’accélération, vous souvenez-vous ?

𝐯(t)=𝐚(t)dt.\begin{matrix} {\mathbf{v}(t) = \int\mathbf{a}(t)\ dt.} \\ \end{matrix}

En substituant l’Équation (12.18) dans l’Équation (12.19), en supposant que la masse ne varie pas dans le temps, on a

𝐯(t)=𝐟(t)/mdt,m𝐯(t)=𝐟(t)dt.\begin{matrix} {\mathbf{v}(t)} & {= \int\mathbf{f}(t)/m\ dt,} \\ {m\mathbf{v}(t)} & {= \int\mathbf{f}(t)\ dt.} \\ \end{matrix}

Enfin, si nous laissons 𝐏(t)\mathbf{P}(t) être la quantité de mouvement d’un corps en fonction du temps, alors en substituant 𝐏(t)=m𝐯(t)\mathbf{P}(t) = m\mathbf{v}(t), nous arrivons à la relation importante

Quantité de mouvement comme force accumulée dans le temps

𝐏(t)=𝐟(t)dt.\begin{matrix} {\mathbf{P}(t)} & {= \int\mathbf{f}(t)\ dt.} \\ \end{matrix}

Puisque l’intégration est un processus de « sommation », l’Équation (12.20) confirme notre interprétation de la quantité de mouvement comme le résultat de l’application continue de force dans le temps. (Note : dans les intégrales précédentes, nous avons omis la constante d’intégration, supposant essentiellement que la vélocité initiale était nulle.)

Rappelons que l’intégration et la différentiation sont des opérations inverses. En prenant la dérivée des deux membres par rapport à tt, on énonce le revers de la relation entre quantité de mouvement et force.

Force comme dérivée de la quantité de mouvement

ddt𝐏(t)=𝐟(t).\begin{matrix} {\frac{d}{dt}\ \mathbf{P}(t)} & {= \mathbf{f}(t).} \\ \end{matrix}

La force externe nette sur un système est égale au taux de variation de la quantité de mouvement du système.

L’Équation (12.21) n’est pas seulement une observation intéressante sur la force et la quantité de mouvement, c’est une façon parfaitement valide de définir la force. En fait, bien que la présentation moderne des lois de Newton soit en termes de forces et de masses, quand Newton lui-même a d’abord exprimé les lois, il les a écrites en termes de quantité de mouvement. Il a utilisé le mot « mouvement », mais d’après ses écrits, nous comprenons qu’il utilisait ce mot dans un sens très particulier, et il parlait vraiment de quantité de mouvement. (Le mot « momentum » n’avait pas encore été attaché à ce concept. Rappelons qu’il était l’homme qui établissait toutes les règles fondamentales.) La deuxième loi de Newton était à l’origine exprimée sous une forme qui ressemble davantage à l’Équation (12.21) qu’à la forme 𝐟=m𝐚\mathbf{f} = m\mathbf{a} que vous verrez plus couramment.

12.3.1Conservation de la quantité de mouvement

Revenons à notre investigation sur ce qui se passe quand Moe pousse contre la Terre pour mettre sa boîte en mouvement. La loi de Newton nous dit que la Terre, n’ayant rien d’autre contre quoi pousser, reçoit une force nette, et donc une accélération (et un couple, dont nous discuterons plus tard). Oui, vous causez l’accélération de la Terre quand vous poussez des boîtes ainsi que lorsque vous faites chaque pas ! Bien sûr, la masse de la Terre est si grande par rapport à la force de Moe que cette accélération est infime. Non seulement cela, mais la force de Moe poussant la boîte vers l’est pourrait être annulée par la force de Joe dans le Dakota du Nord poussant sa boîte vers l’ouest au même moment. Une question encore plus importante que ces deux faits concerne les « lois de conservation » de la physique : « il n’existe pas de quantité de mouvement gratuite ». Moe n’a pas besoin de Joe pour équilibrer sa force ; il s’avère qu’il ne peut pas s’en empêcher, il le fait tout seul !

Observez qu’une fois que Moe met la boîte en mouvement, il devra finalement l’arrêter. Selon la première loi de Newton, le seul moyen d’arrêter une boîte en mouvement est par une force, et selon la troisième loi, cela ne peut se produire que s’il y a un autre objet impliqué pour recevoir la force opposée. Peut-être que la boîte heurte un arbre et s’arrête. (Nous considérons l’arbre comme faisant partie de la Terre. Rappelons que la troisième loi de Newton justifie notre traitement des objets connectés comme un seul objet, à condition qu’ils restent rigidement connectés.) Pour arrêter la boîte, la Terre doit pousser contre elle avec une force dans la direction opposée à celle que Moe a utilisée pour la mettre en mouvement. Cependant, nous savons que le « montant total » de poussée doit être le même, ce qui signifie que la Terre doit repousser avec une force suffisamment forte, ou pendant une durée suffisamment longue (peut-être que la boîte de Moe roule dans un tas d’herbes hautes) pour ramener la quantité de mouvement de la boîte à zéro. Vous voyez donc que quelle que soit l’accélération que la Terre a reçue à la suite de la mise en mouvement de la boîte de Moe doit toujours être exactement annulée par la force nécessaire pour ramener la boîte à l’arrêt.

Mais peut-être que la boîte de Moe ne s’arrête pas en poussant directement contre la Terre. Disons qu’elle percute la boîte de Joe. Voilà ! Nous avons arrêté la boîte de Moe, et aucune force n’a été appliquée à la Terre. Mais maintenant, par la troisième loi de Newton, la boîte de Joe doit commencer à accélérer, et nous sommes revenus au point de départ avec une boîte en mouvement qui continuera à se déplacer à moins qu’elle ne reçoive une force pour l’arrêter. En fin de compte, le seul moyen d’arrêter cette réaction en chaîne lancée par la poussée de Moe contre sa boîte est que quelque chose, finalement, pousse contre la Terre.

Nous pouvons généraliser cette idée encore plus. Nous sommes justifiés à traiter la Terre entière, et toutes ses parties mobiles, comme une seule particule avec toute sa masse centrée en un endroit connu sous le nom de centre de masse. (Nous parlons davantage de ce point spécial dans la Section 12.3.2.) Les poussées contre la Terre de gens comme Moe entraînent des transferts de quantité de mouvement entre les objets du système. Chaque partie se déplacera au sein de ce système très compliqué relativement aux autres parties et au centre de masse du système. Cependant, la quantité totale de mouvement de l’ensemble du système est toujours constante, à moins que des forces externes n’agissent sur le système. C’est ce qu’on appelle la loi de conservation de la quantité de mouvement.

La loi de conservation de la quantité de mouvement

La quantité de mouvement d’un système est constante à moins que des forces externes n’agissent sur ce système.

La conservation de la quantité de mouvement est précisément ce que dit l’Équation (12.21). C’est certainement un fait vérifié expérimentalement, mais c’est aussi une conséquence naturelle des lois de Newton. La Section 12.4 discute de la façon d’utiliser cette loi importante pour simuler la collision d’objets. Cependant, avant d’en arriver là, nous devons examiner de plus près le centre de masse.

12.3.2Le centre de masse

Notre discussion sur la quantité de mouvement nous a amenés à considérer le centre de masse d’un objet. Disons quelques mots supplémentaires sur ce concept important. Pour les besoins ordinaires, le centre de masse est équivalent au centre de gravité, qui est essentiellement le point autour duquel l’objet est parfaitement équilibré. Si on équilibre un objet sur la pointe d’une tige très fine ou si on le suspend à un fil, la tige ou le fil sera sur une ligne qui contient le centre de masse.

Avant de discuter comment calculer le centre de masse mathématiquement, voyons comment nous pouvons le mesurer expérimentalement. Imaginez que nous avons un objet de forme étrange, ou de densité irrégulière. Nous pouvons déterminer son centre de gravité en suspendant l’objet depuis n’importe quel point arbitraire sur sa surface. Cela définit une ligne verticale sur laquelle le centre de gravité doit se trouver. En répétant l’expérience avec un point différent sur l’objet et en trouvant l’intersection de ces deux lignes, nous pouvons localiser le centre de gravité.

Les auteurs ont réalisé cette expérience sur un morceau de panneau de particules, comme le montre la Figure 12.7. Premièrement, le panneau a été découpé en une forme délibérément asymétrique. Ensuite, nous avons choisi trois emplacements arbitraires depuis lesquels suspendre le panneau, et quand le panneau avait fini de se balancer, nous avons tracé une ligne épaisse dessus, coïncidant avec la corde à laquelle le panneau était suspendu. Effectivement, la physique a fonctionné, et la troisième ligne passait exactement par l’intersection des deux premières, au centre de masse du panneau.

image

Figure 12.7Mesure expérimentale du centre de masse d’un morceau de panneau de particules de forme irrégulière

Pour calculer le centre de masse mathématiquement, nous imaginons l’objet divisé en un très grand nombre de petits « éléments de masse ». S’il y a nn de tels éléments, et que nous désignons la masse et la position du ii-ième élément par mim_{i} et 𝐫i\mathbf{r}_{i} respectivement, alors le centre de masse 𝐫c\mathbf{r}_{c} est simplement la moyenne pondérée des positions de tous les éléments de masse.

Calcul du centre de masse

𝐫c=1Minmi𝐫𝐢.\begin{matrix} {\mathbf{r}_{c} = \frac{1}{M}\sum\limits_{i}^{n}m_{i}\mathbf{r}_{\mathbf{i}}.} \\ \end{matrix}

Dans l’Équation (12.22), MM est la masse totale de l’objet

M=inmi.M = \sum\limits_{i}^{n}m_{i}.

Pour nos besoins, la propriété la plus importante du centre de masse est que si l’objet tourne, il tournera autour de son centre de masse. Cela suppose, bien sûr, que l’objet tourne librement et qu’il n’y a pas de contrainte l’obligeant à tourner autour d’un autre point.

À titre d’exemple, considérons un marteau de forgeron. De toute évidence, le centre de masse du marteau de forgeron est proche de l’extrémité lourde, pas au milieu du manche. Supposons que nous lancions le marteau à travers la pièce. Pendant qu’il culbute dans l’espace, n’importe quel point arbitraire sur le marteau tracera une forme spiralée compliquée. Le centre de masse, cependant, se déplace sur une parabole, en parfait accord avec les équations cinématiques que nous avons apprises dans le Chapitre 11.

Les auteurs n’ont pas pu résister à l’occasion de lancer de grands objets, donc nous avons vérifié cette hypothèse expérimentalement, et vous pouvez le faire aussi.13 Nous avons commencé avec le morceau de panneau de particules de forme irrégulière, dont le centre de masse avait été localisé expérimentalement et clairement marqué. Ensuite, la partie amusante : nous l’avons jeté en l’air et avons pris une série de photos de sa trajectoire avec une caméra montée sur un trépied. Enfin, nous avons fusionné ces frames en une seule image, et avons utilisé les moindres carrés pour ajuster une parabole à travers les points marquant le centre de masse. Le résultat de l’expérience est la Figure 12.8.

image

Figure 12.8 Le centre de masse est le point spécial qui obéit aux équations cinématiques simples du Chapitre 11. Tout autre point trace un chemin spiralé pendant que l’objet tourne.

Une petite note : lors de l’ajustement de la parabole, nous n’avons pas inclus la première frame dans l’ensemble de données. Comme vous pouvez le voir, dans la première frame, le panneau est encore dans la main de l’assistant, et n’a donc pas encore commencé sa trajectoire de chute libre (parabolique).

Parce qu’un objet tournera autour de son centre de masse lorsqu’il est autorisé à tourner librement, dans une simulation physique, il est très avantageux de sélectionner l’origine de votre objet pour qu’elle soit à son centre de masse. Bien sûr, vous pourriez avoir de bonnes raisons de placer l’origine de l’objet ailleurs. Par exemple, vous pourriez avoir une représentation graphique d’un objet avec l’origine placée quelque part qui avait du sens pour l’artiste qui a fait ce modèle. En général, si vous placez l’origine ailleurs qu’au centre de masse, vous devrez probablement gérer deux « positions » de l’objet : une position dans le système physique qui décrit les coordonnées mondiales du centre de masse, et une autre, peut-être dans le système de rendu, pour l’origine de votre modèle graphique. Le code qui traduit entre ces deux conventions se trouvera probablement soit dans l’interface avec le moteur physique (par exemple, le code qui met à jour la position des objets après que la simulation physique s’est exécutée), soit dans le code qui configure le référentiel de l’objet pendant le rendu.

Le centre de masse est fixe pour un corps rigide comme un marteau de forgeron ; cette hypothèse était implicite dans toute la discussion ; sinon, il n’aurait pas de sens de conseiller de placer l’origine au centre de masse. Cependant, pour un système général avec des parties mobiles, comme la Terre, le centre de masse est une propriété dynamique, pas une constante. Le centre de masse se déplace au sein de l’objet lorsque les parties sont reconfigurées.

Par exemple, imaginez que tous les gens du monde décident de visiter le Pôle Nord en même temps. En supposant que nous tiendrions tous et qu’il y aurait assez de cache-oreilles pour tout le monde, le centre de masse de la Terre se déplacerait vers le Pôle Nord. Ce nouveau centre de masse, cependant, tracerait exactement la même trajectoire que l’ancien. En d’autres termes, tandis que la trajectoire du centre géométrique de la Terre serait légèrement « vers le sud » par rapport à ce qu’elle aurait été si nous étions tous restés à la maison, la trajectoire tracée par le centre de masse est la même dans les deux cas.

Ou bien, disons qu’au lieu de visiter le Pôle Nord, nous décidons tous d’aller aux Îles Galapagos, qui se trouvent très près de l’équateur. La rotation de la Terre deviendrait-elle soudainement toute « branlante » comme un ventilateur de plafond mal équilibré ? Non ! Au contraire, le centre de masse se déplacerait vers les Îles Galapagos, et la Terre tournerait autour de ce nouveau centre de masse. Ainsi, bien que la rotation, vue d’en haut, puisse sembler asymétrique, car la rotation ne serait pas autour du centre de la Terre sphérique (en supposant que la Terre soit parfaitement sphérique), la rotation serait fluide. Un ventilateur de plafond déséquilibré est branlant parce qu’il n’est pas libre de choisir son axe de rotation, et il doit donc être équilibré pour aligner le centre de masse avec l’axe de rotation fixe. La Terre, cependant, n’est connectée à rien, et elle est libre de tourner autour de son centre de masse, où que ce centre de masse se trouve.

Bien sûr, tous les gens sur Terre réunis ont moins de masse que notre Lune, donc notre discussion a été trompeuse. Le point qui trace une ellipse pendant que nous orbitons autour du Soleil n’est pas du tout le centre de masse de la Terre ! C’est le centre de masse du système Terre-Lune entier. Ce point n’est pas vraiment proche du centre géométrique de la Terre, bien qu’il soit sous sa surface, mais seulement parce que la Terre est tellement plus massive que la Lune. Alors que la Lune orbite autour de la Terre, le centre de masse du système se déplace au sein de la Terre. C’est ce point imaginaire qui orbite autour du Soleil, pas le centre de masse de la Terre elle-même.

12.4Forces impulsives et collisions

Dans les jeux vidéo, les choses entrent toujours en collision les unes avec les autres, il semble donc approprié de passer du temps à parler des collisions. Comme nous l’avons mentionné, dans le monde réel, la quantité de mouvement ne change pas instantanément ; plutôt, une grande force agit pendant une très courte période. Cependant, malgré la réalité (rappelons la première loi de la physique des jeux vidéo), il arrive fréquemment que l’intervalle pendant lequel ces forces agissent soit inférieur à la résolution de notre pas de temps physique, et pour des besoins pratiques, on peut considérer que le changement de quantité de mouvement s’est produit instantanément. Le scénario le plus important et le plus courant est lorsque l’objet est impliqué dans une collision. Comme la masse de la plupart des objets est constante, un changement instantané de quantité de mouvement se réduit généralement à un changement instantané de vélocité.

Considérons deux objets se dirigeant l’un vers l’autre dans une dimension, avec des masses m1m_{1} et m2m_{2} et des vitesses v1v_{1} et v2v_{2}, comme illustré dans la Figure 12.9.

image

Figure 12.9Une collision

En utilisant la relation de quantité de mouvement p=mvp = mv, nous pouvons calculer la quantité de mouvement des deux objets (notée p1p_{1} et p2p_{2}) et du système dans son ensemble (notée simplement pp) avant et après la collision. Nous supposons que les masses restent constantes et mettons des apostrophes sur les symboles qui se réfèrent aux valeurs après la collision :

p1=m1v1,p2=m2v2,p=p1+p2=m1v1+m2v2,p1=m1v1,p2=m2v2,p=p1+p2=m1v1+m2v2.\begin{matrix} p_{1} & {= m_{1}v_{1},} & p_{2} & {= m_{2}v_{2},} & p & {= p_{1} + p_{2} = m_{1}v_{1} + m_{2}v_{2},} \\ p_{1}^{\prime} & {= m_{1}v_{1}^{\prime},} & p_{2}^{\prime} & {= m_{2}v_{2}^{\prime},} & p^{\prime} & {= p_{1}^{\prime} + p_{2}^{\prime} = m_{1}v_{1}^{\prime} + m_{2}v_{2}^{\prime}.} \\ \end{matrix}

Le changement de quantité de mouvement de chaque objet, selon la loi de conservation de la quantité de mouvement, est en réalité le résultat d’une force agissant dans le temps. Cependant, nous considérons ici la collision comme produisant un changement instantané de quantité de mouvement des deux objets. Une force traitée de cette façon est connue sous le nom de force impulsive, ou plus simplement d’impulsion. Comme une impulsion est un changement immédiat de quantité de mouvement, elle a les mêmes unités que la quantité de mouvement : ML/TML/T. Notez qu’une impulsion est très différente d’une force ordinaire, qui a pour unités ML/T2ML/T^{2}. C’est une erreur de programmeur très courante d’utiliser les impulsions et les forces de façon incorrecte, donc assurez-vous de surveiller vos unités.

Lorsque deux objets entrent en collision, de nombreuses choses peuvent se produire, même si on suppose qu’ils restent intacts. Un scénario probable est qu’ils rebondissent l’un sur l’autre, changeant les signes de v1v_{1} et v2v_{2}. Ou ils peuvent rester collés ensemble. Le premier est connu sous le nom de collision élastique et le second de collision inélastique. (En fait, seul un « rebond parfait » est considéré comme véritablement élastique. Les termes « parfaitement inélastique » et « parfaitement élastique » sont utilisés pour désigner les deux extrêmes, tandis qu’une collision intermédiaire est décrite simplement comme « inélastique ». La Section 12.4.2 définit ces termes un peu plus précisément en utilisant le coefficient de restitution, mais pour comprendre pleinement la distinction, il faut comprendre l’énergie cinétique. Comme nous l’avons mentionné au début du Chapitre 11, l’énergie est certainement un concept important en physique, mais elle ne joue pas un rôle central dans la dynamique de Newton-Euler utilisée par la plupart des simulations en temps réel, et elle n’est pas beaucoup discutée dans ce livre.) La vélocité (et la quantité de mouvement) de chaque objet est susceptible de changer, mais la loi de conservation de la quantité de mouvement dit que la quantité de mouvement totale du système des deux objets doit rester constante. C’est-à-dire p=pp = p^{\prime}.

En général, nous ne pouvons pas prédire les vitesses individuelles v1v_{1} et v2v_{2} en utilisant uniquement la loi de conservation de la quantité de mouvement, car cette loi nous donne une équation (p=pp = p^{\prime}) et il y a deux inconnues. Avant de considérer quel autre élément d’information nous avons besoin, examinons quelques cas plus simples de collisions et de conservation de la quantité de mouvement. Supposons pour l’instant que la collision est parfaitement inélastique, c’est-à-dire que les objets restent collés ensemble à l’impact. Cela nous donne l’autre équation dont nous avions besoin pour résoudre le système d’équations : v1=v2v_{1}^{\prime} = v_{2}^{\prime}.

12.4.1Collisions parfaitement inélastiques

Un exemple classique de collision inélastique est un pistolet tirant une balle dans un bloc. Supposons que, comme illustré dans la Figure 12.10, un bloc de bois pesant 2.00 kg soit au repos, suspendu à un fil dont la masse est négligée. Nous tirons un pistolet sur le bloc, et la balle, qui a une masse de 10 g, frappe le bloc à une vitesse de 350 m/s. La balle reste coincée dans le bloc. Quelle est la vitesse horizontale du bloc immédiatement après l’impact ?

image

Figure 12.10 Une balle tirée dans un bloc suspendu par un fil (en d’autres termes, un épisode typique de MythBusters)

D’abord, nous calculons la quantité de mouvement initiale du système, qui est entièrement contenue dans la balle :

p=m1v1+m2v2=(2.00kg)(0)+(10.0g)(350m/s)=3.50kgm/s.p = m_{1}v_{1} + m_{2}v_{2} = (2.00\ {kg})(0) + (10.0\ g)(350\ {m/s}) = 3.50\ {kg\ m/s}.

Maintenant, nous cherchons la vélocité commune résultante, que nous noterons simplement vv^{\prime}, en utilisant la loi de conservation de la quantité de mouvement, p=pp = p^{\prime}, et le fait que c’est une collision inélastique, v=v1=v2v^{\prime} = v_{1}^{\prime} = v_{2}^{\prime} :

p=m1v1+m2v2,3.50kgm/s=(2.00kg)v+(10.0g)v,3.50kgm/s=(2.00kg+10.0g)v,(3.50kgm/s)/(2.01kg)=v,1.74m/s=v.\begin{matrix} p^{\prime} & {= m_{1}v_{1}^{\prime} + m_{2}v_{2}^{\prime},} \\ {3.50\ {kg\ m/s}} & {= (2.00\ {kg})v^{\prime} + (10.0\ g)v^{\prime},} \\ {3.50\ {kg\ m/s}} & {= (2.00\ {kg} + 10.0\ g)v^{\prime},} \\ {(3.50\ {kg\ m/s})/(2.01\ {kg})} & {= v^{\prime},} \\ {1.74\ {m/s}} & {= v^{\prime}.} \\ \end{matrix}

Examinons un autre exemple de collision inélastique, cette fois en 2D. Considérons un conducteur qui brûle un feu rouge et entre en collision avec une voiture traversant l’intersection. Disons que Grant est le conducteur prudent, et au moment de la collision, Grant et son hybride économique ont une masse combinée de 1 500 kg et se déplacent vers l’ouest à 35 km/h. Kari,14 qui ne fait pas attention, voit la voiture de Grant trop tard et vire à gauche. Elle et sa voiture ont une masse combinée de 2 500 kg. Au moment de l’impact, elle se déplace à 65 km/h, se dirigeant à 25° ouest du nord, comme le montre la Figure 12.11. Supposons que nous puissions traiter la collision comme inélastique. Quelle est la vélocité de la collision juste après l’impact ?15

image

Figure 12.11Un accident de voiture

Pour résoudre ce problème, établissons un espace de coordonnées 2D où +x+ x est l’est et +y+ y est le nord. Nous calculons la quantité de mouvement totale avant l’accident comme

𝐏=m1𝐯1+m2𝐯2=(1500kg)(35km/h)[10]+(2500kg)(65km/h)[cos115osin115o]=(52500kgkm/h)[10]+(162500kgkm/h)[0.4230.906]=([525000]+[68700147000])kgkm/h=[121200147000]kgkm/h.\begin{matrix} \mathbf{P} & {= m_{1}\mathbf{v}_{1} + m_{2}\mathbf{v}_{2} = (1{~}500\ {kg})(35\ {km/h})\begin{bmatrix} {- 1} \\ 0 \\ \end{bmatrix}} \\ & {\quad + (2{~}500\ {kg})(65\ {km/h})\begin{bmatrix} {\cos 115^{o}} \\ {\sin 115^{o}} \\ \end{bmatrix}} \\ & {= (52{~}500\ {kg\ km/h})\begin{bmatrix} {- 1} \\ 0 \\ \end{bmatrix} + (162{~}500\ {kg\ km/h})\begin{bmatrix} {- 0.423} \\ 0.906 \\ \end{bmatrix}} \\ & {= \left( \begin{bmatrix} {- 52{~}500} \\ 0 \\ \end{bmatrix} + \begin{bmatrix} {- 68{~}700} \\ {147{~}000} \\ \end{bmatrix} \right)\ {kg\ km/h} = \begin{bmatrix} {- 121{~}200} \\ {147{~}000} \\ \end{bmatrix}\ {kg\ km/h}.} \\ \end{matrix}

La vélocité résultante de l’amas des deux voitures est simplement la quantité de mouvement que nous venons de calculer divisée par la masse totale combinée :

𝐯=𝐏/(m1+m2)=([121200147000]kgkm/h)/(1500kg+2500kg)=([121200147000]kgkm/h)/(4000kg)=[30.336.8]km/h.\begin{matrix} \mathbf{v}^{\prime} & {= \mathbf{P}^{\prime}/(m_{1} + m_{2}) = \left( \begin{bmatrix} {- 121{~}200} \\ {147{~}000} \\ \end{bmatrix}\ {kg\ km/h} \right)/(1{~}500\ {kg} + 2{~}500\ {kg})} \\ & {= \left( \begin{bmatrix} {- 121{~}200} \\ {147{~}000} \\ \end{bmatrix}\ {kg\ km/h} \right)/(4{~}000\ {kg}) = \begin{bmatrix} {- 30.3} \\ 36.8 \\ \end{bmatrix}\ {km/h}.} \\ \end{matrix}

12.4.2Réponse générale aux collisions

Les collisions inélastiques simples peuvent être résolues en utilisant le principe de conservation de la quantité de mouvement, mais comment calculons-nous les vitesses dans le cas général ? Avant de pouvoir répondre complètement à cette question, nous devons considérer le contexte dans lequel elle est posée. Gérer les collisions est généralement un processus en deux étapes. Premièrement, nous devons détecter qu’une collision s’est produite, ce qui signifie que les objets se pénètrent déjà, ou qu’une collision est sur le point de se produire dans ce pas de temps. La deuxième étape consiste à prendre des mesures pour résoudre ou prévenir la collision. La première tâche est connue sous le nom de détection de collision, et la seconde sous le nom de réponse à la collision. Notre objectif pour l’instant est de discuter des collisions en termes théoriques (nous abordons quelques problèmes pratiques liés au fonctionnement réel des simulations physiques dans la Section 12.6), donc pour l’instant, essayons simplement une explication générale de la façon dont la quantité de mouvement des corps rigides change en réponse à une collision. Nous supposons que nous savons déjà que deux objets sont entrés en collision, et nous souhaitons prédire leur comportement après la collision.

Pour ce faire, que ce soit de façon abstraite dans un problème de physique, ou dans du code de réponse aux collisions dans une simulation numérique, nous avons généralement besoin de savoir non seulement que deux objets sont entrés en collision, mais aussi ils sont entrés en collision, et comment les deux objets étaient orientés l’un par rapport à l’autre au point de contact. Par exemple, dans l’accident de voiture entre Grant et Kari, nous devons savoir que la voiture de Grant a été heurtée près de la porte gauche, et celle de Kari à son aile avant droite. Bien sûr, une collision ne se produit pas nécessairement en un seul point. Souvent, une arête d’un objet peut toucher une surface d’un autre, ou peut-être que des surfaces entières sont en contact. Au moment de la rédaction, la plupart des systèmes de détection de collision en temps réel ne renvoient pas les collisions d’une manière aussi descriptive, et les systèmes de réponse aux collisions ne sont pas vraiment capables d’utiliser ces informations supplémentaires. Le plus proche que nous obtenons est que le système de détection localise plusieurs points de contact (ou de pénétration) puis traite cette liste d’une façon ou d’une autre (par exemple, en trouvant leur enveloppe convexe ou en cherchant une normale de surface moyenne). Dans tous les cas, la meilleure façon de faire cela rapidement est très clairement à la pointe de la recherche, et en tant que tel, n’appartient pas à un livre d’introduction comme celui-ci. Ici, nous considérons uniquement les principes impliqués dans un seul point de contact. Les techniques plus avancées s’appuient sur ces principes.

La Figure 12.12 montre quelques exemples de résultats de collision qui pourraient être renvoyés par un système de détection de collision. Notez que chaque résultat de collision (flèche noire) a un point de contact (à la queue de la flèche) et une normale de surface, généralement supposée être un vecteur unitaire. Une convention arbitraire est choisie pour la direction de la normale ; dans la Figure 12.12, elle pointe loin du « premier » objet. De plus, les deux objets peuvent être arbitrairement assignés aux rôles d’objet « premier » et « second », peut-être par hasard que les objets se trouvaient dans une certaine structure de partitionnement de l’espace. Ces attributions peuvent même varier d’une frame à l’autre, donc le calcul de la réponse doit être symétrique. Ce qui n’est pas représenté dans le diagramme, c’est qu’une profondeur de pénétration est souvent renvoyée si les objets se pénètrent déjà.

image

Figure 12.12 Exemples des types de résultats renvoyés par la détection de collision.

Et toujours, nous devons garder à l’esprit la première loi de la physique des jeux vidéo. Toutes les collisions dans les jeux vidéo ne doivent pas forcément être entre des objets « réels », c’est-à-dire ceux qui sont représentés dans le système physique. Par exemple, considérez un jeu avec une mécanique de coup de pied. Il peut être utile de traiter un coup de pied comme une « collision » avec un objet, même si le pied du personnage n’est pas dans le système physique ou si cette collision a été déterminée par de simples tests de proximité ou du lancer de rayons conçus en fonction des objectifs de jeu et non de la réalité. (Le personnage joueur aurait pu être trop loin ou trop près pour que le coup de pied atteigne vraiment la cible ; mais c’est sans importance.) Il pourrait être très utile que la réponse à cette action soit gérée de manière similaire aux collisions ordinaires. Par exemple, un effet sonore et de particules se joue, l’objet reçoit une réduction de points de vie, et son apparence visuelle change, etc. Dans ce cas, afin d’utiliser le même code de réponse aux collisions pour les collisions ordinaires et les collisions « virtuelles » telles que les coups de pied du joueur (même si c’est juste pour avoir les effets cosmétiques corrects), vous pourriez avoir besoin de synthétiser des valeurs normalement fournies par le système de détection de collision pour vos collisions « virtuelles », comme la masse et la vélocité du pied, et le point de contact et la normale de surface.

Un dernier avertissement est que nous ne nous préoccupons que de la quantité de mouvement linéaire pour l’instant ; nos objets ne tournent pas. Cela signifie que l’explication que nous donnons dans cette section sera incomplète. Cependant, il sera utile de couvrir les principes généraux ici dans un contexte exempt de la complexité supplémentaire qui vient avec la rotation.

Maintenant au cœur du problème. En supposant que nous ayons détecté une collision et obtenu une position et une normale, comment déterminons-nous les vitesses résultantes pour la réponse à la collision ? Ici, nous montrons la méthode habituelle, en suivant un article de Chris Hecker [7]. Nous commençons par revoir nos principes directeurs.

Notre premier principe directeur est que, bien que nous sachions qu’en réalité une très grande force agit pendant une courte période, la période est si courte par rapport à notre pas de temps que nous considérerons la réponse à la collision comme se produisant instantanément. C’est-à-dire que nous ne calculerons pas une force, mais plutôt une impulsion, qui entraînera un changement instantané de quantité de mouvement des objets.

Le deuxième principe directeur nous est donné par la troisième loi de Newton : quelle que soit la force (impulsive) appliquée à un objet, la force opposée doit être appliquée à l’autre objet. La loi de conservation de la quantité de mouvement dit essentiellement la même chose : si nous changeons la quantité de mouvement d’un objet, nous devons faire le changement opposé de quantité de mouvement à l’autre objet pour que la quantité de mouvement totale du système après la collision soit la même qu’avant la collision.

Ainsi, pour résoudre une collision entre deux objets, le plan est de calculer une impulsion avec la bonne magnitude et d’appliquer cette impulsion aux deux objets, mais dans des directions opposées. Une impulsion est une grandeur vectorielle, donc nous devons connaître sa magnitude et sa direction. La direction nous est déjà donnée : c’est la normale de surface fournie par le système de détection de collision. Les détails du choix d’une normale de surface sont une question de détection de collision, pas de réponse, et ne seront pas discutés ici. Mais remarquez que si les objets se déplacent parallèlement à cette normale, ils aggravent le problème (pénétrant davantage) ou l’améliorent (s’éloignant et résolvant la pénétration). En revanche, si nous supposons que la distance de pénétration est relativement faible et que les surfaces sont localement plates et perpendiculaires à la normale près du point de contact, alors tout mouvement perpendiculaire à la normale de surface ne fait pas changer la distance de pénétration. Donc la normale de surface est vraiment la seule direction qui importe.

En résumé, notre tâche est de déterminer la bonne magnitude d’une impulsion qui sera dirigée le long de la normale de surface et résoudra (ou empêchera) la pénétration. Pour simplement empêcher une pénétration qui ne s’est pas encore produite, nous n’avons qu’à supprimer toute vélocité relative agissant parallèlement à la normale de surface. Cette portion de la vélocité relative est la vélocité qui, si elle était appliquée pour faire avancer les objets dans le temps, entraînerait une pénétration. Toute vélocité relative agissant perpendiculairement à la normale est acceptable et ne nécessite pas d’être contrée, selon notre hypothèse que les surfaces sont localement plates près du point de contact. Comme illustré dans la Figure 12.13, la vélocité de m1m_{1} relative à m2m_{2} est calculée comme 𝐯rel=𝐯1𝐯2\mathbf{v}_{rel} = \mathbf{v}_{1} - \mathbf{v}_{2}, et la longueur de cette projection sur la normale est donnée par 𝐧𝐯rel\mathbf{n} \cdot \mathbf{v}_{rel}.

image

Figure 12.13 Calcul de la quantité de vélocité relative agissant parallèlement à la normale de surface

Annuler la vélocité relative empêchera la pénétration, mais ce n’est pas toujours la réponse correcte. Quand des objets entrent en collision, ils ne s’arrêtent pas juste l’un à côté de l’autre — ils rebondissent l’un sur l’autre. Il nous manque donc un ingrédient qui décrit la différence dans les réponses aux collisions d’un sac de sable jeté au sol et d’une SuperBall. Une loi de collision simple et populaire (bien que pas la seule) qui peut être utilisée pour distinguer ces cas est la loi de collision de Newton. Cette loi introduit le coefficient de restitution, noté ee, qui est un nombre fractionnaire qui relie la magnitude de la vélocité relative le long de la normale de surface après la collision à la même valeur mesurée juste avant la collision. Quand e=0e = 0, la vélocité post-collision le long de la normale est nulle, et nous avons une collision parfaitement inélastique. Utiliser e=1e = 1 produit une collision parfaitement élastique, où la vélocité relative le long de la normale a la même magnitude (mais signe opposé) qu’avant la collision. Laisser tomber un sac de sable sur un tapis est un exemple proche d’une collision inélastique, tandis que laisser tomber une SuperBall est une collision très élastique. En utilisant les formules de la Section 11.6, nous pouvons également montrer que, si un objet est lâché et autorisé à rebondir plusieurs fois, le coefficient de restitution donne le rapport des hauteurs d’apogée à des rebonds successifs.

Notons la magnitude de l’impulsion de réponse à la collision comme kk. La première masse, m1m_{1}, recevra l’impulsion (vectorielle) k𝐧- k\mathbf{n}, tandis que m2m_{2} subit le changement opposé de quantité de mouvement de k𝐧k\mathbf{n}. Les signes sont basés sur notre choix arbitraire de la direction de la normale de surface. Maintenant que nous savons ce que nous voulons, calculer le bon kk pour annuler la vélocité relative est un exercice algébrique simple. Comme précédemment, nous désignons les valeurs post-collision avec des apostrophes. Une impulsion est un changement instantané de quantité de mouvement, donc la quantité de mouvement post-collision du premier objet est 𝐏1=𝐏1k𝐧\mathbf{P}_{1}^{\prime} = \mathbf{P}_{1} - k\mathbf{n}. En divisant par la masse et en se rappelant que 𝐏=m𝐯\mathbf{P} = m\mathbf{v}, nous exprimons les vitesses post-collision comme

Vitesses post-collision

𝐯1=𝐯1k𝐧/m1,𝐯2=𝐯2+k𝐧/m2.\begin{matrix} {\mathbf{v}_{1}^{\prime} = \mathbf{v}_{1} - k\mathbf{n}/m_{1},} & & {\mathbf{v}_{2}^{\prime} = \mathbf{v}_{2} + k\mathbf{n}/m_{2}.} \\ \end{matrix}

La vélocité relative post-collision est simplement leur différence, 𝐯rel=𝐯1𝐯2\mathbf{v}_{rel}^{\prime} = \mathbf{v}_{1}^{\prime} - \mathbf{v}_{2}^{\prime}. Nous résolvons pour kk en exprimant la vélocité relative résultante le long de la normale comme le multiple désiré de la vélocité relative le long de la normale avant l’impact.

Résolution pour 𝐤\mathbf{k}, la magnitude de l’impulsion

𝐯rel𝐧=e𝐯rel𝐧,(𝐯1𝐯2)𝐧=e𝐯rel𝐧,[(𝐯1k𝐧/m1)(𝐯2+k𝐧/m2)]𝐧=e𝐯rel𝐧,[(𝐯1𝐯2)(k𝐧/m1+k𝐧/m2)]𝐧=e𝐯rel𝐧,[𝐯relk(1/m1+1/m2)𝐧]𝐧=e𝐯rel𝐧,𝐯rel𝐧k(1/m1+1/m2)𝐧𝐧=e𝐯rel𝐧,k(1/m1+1/m2)𝐧𝐧=(e+1)𝐯rel𝐧,k=(e+1)𝐯rel𝐧(1/m1+1/m2)𝐧𝐧.\begin{matrix} {\mathbf{v}_{rel}^{\prime} \cdot \mathbf{n}} & {= - e\,\mathbf{v}_{rel} \cdot \mathbf{n},} \\ {(\mathbf{v}_{1}^{\prime} - \mathbf{v}_{2}^{\prime}) \cdot \mathbf{n}} & {= - e\,\mathbf{v}_{rel} \cdot \mathbf{n},} \\ {\lbrack(\mathbf{v}_{1} - k\mathbf{n}/m_{1}) - (\mathbf{v}_{2} + k\mathbf{n}/m_{2})\rbrack \cdot \mathbf{n}} & {= - e\,\mathbf{v}_{rel} \cdot \mathbf{n},} \\ {\lbrack(\mathbf{v}_{1} - \mathbf{v}_{2}) - (k\mathbf{n}/m_{1} + k\mathbf{n}/m_{2})\rbrack \cdot \mathbf{n}} & {= - e\,\mathbf{v}_{rel} \cdot \mathbf{n},} \\ {\lbrack\mathbf{v}_{rel} - k(1/m_{1} + 1/m_{2})\mathbf{n}\rbrack \cdot \mathbf{n}} & {= - e\,\mathbf{v}_{rel} \cdot \mathbf{n},} \\ {\mathbf{v}_{rel} \cdot \mathbf{n} - k(1/m_{1} + 1/m_{2})\,\mathbf{n} \cdot \mathbf{n}} & {= - e\,\mathbf{v}_{rel} \cdot \mathbf{n},} \\ {k(1/m_{1} + 1/m_{2})\,\mathbf{n} \cdot \mathbf{n}} & {= (e + 1)\,\mathbf{v}_{rel} \cdot \mathbf{n},} \\ k & {= \frac{(e + 1)\mathbf{v}_{rel} \cdot \mathbf{n}}{(1/m_{1} + 1/m_{2})\,\mathbf{n} \cdot \mathbf{n}}.} \\ \end{matrix}

L’Équation (12.23) peut être légèrement simplifiée dans le cas courant où 𝐧\mathbf{n} est connu pour avoir une longueur unitaire. Si 𝐧\mathbf{n} n’est pas un vecteur unitaire, alors le changement de kk résultant de la longueur de 𝐧\mathbf{n} est compensé par le calcul de l’impulsion (vectorielle) k𝐧k\mathbf{n}. Ainsi, kk est la vraie magnitude de l’impulsion uniquement lorsque 𝐧\mathbf{n} est un vecteur unitaire.

Travaillons quelques exemples de l’Équation (12.23). Premièrement, voyons comment le coefficient de restitution peut être utilisé pour décrire la différence entre laisser tomber un sac de sable et une SuperBall. Nous allons laisser tomber ces objets sur un sol en béton, ce qui est un exemple instructif car il montre comment les objets immobiles peuvent être facilement gérés dans la plupart des moteurs physiques en agissant comme s’ils avaient une masse infinie. Il s’avère que la masse inverse est la quantité avec laquelle nous travaillons habituellement dans les calculs impliquant de tels objets spéciaux (comme illustré dans l’Équation (12.23)). De plus, la masse inverse (et son analogue, le tenseur d’inertie inverse, qui sera discuté plus tard) sont des quantités dérivées qui sont nécessaires si fréquemment qu’elles sont souvent précalculées. Cela signifie que le code physique peut souvent travailler avec des objets immobiles16 sans les traiter comme un cas spécial, simplement en mettant la masse inverse à zéro. Quand l’une des masses inverses est zéro, nous pourrions en fait traiter directement les vitesses et contourner l’Équation (12.23), car kk sera proportionnel à la masse mais le changement de vitesse résultant de l’application de kk est inversement proportionnel à la masse. Plus loin, nous résolvons un exemple de cas général où de telles simplifications ne sont pas possibles.

Disons que nous avons une SuperBall et un sac de sable, pesant chacun 50 grammes. Pour éviter que la solution de notre exemple soit complètement évidente sans l’Équation (12.23), nous arrangerons le point d’impact sur une surface inclinée, de sorte que 𝐧\mathbf{n} ne soit pas un axe cardinal trivial. Comme nous ne sommes pas tenus d’utiliser un vecteur unitaire, disons que 𝐧=[1,3]\mathbf{n} = \lbrack 1,3\rbrack. Dans notre imagination, nous lançons les deux objets exactement de la même façon, de sorte que la vitesse d’impact dans les deux cas soit 𝐯2=[4,4]\mathbf{v}_{2} = \lbrack - 4, - 4\rbrack. Ceci est illustré dans la Figure 12.14.

image

Figure 12.14 Rebond d’un sac de sable ou d’une SuperBall contre une surface inclinée

Pour déterminer la vitesse résultante, nous résolvons d’abord pour kk, le facteur d’échelle pour l’impulsion. Pour ce faire, nous devons choisir un coefficient de restitution. Pour la collision avec la SuperBall, nous utiliserons e=0.9e = 0.9, proche de la valeur annoncée. En résolvant pour kk (rappelons que 𝐯rel=𝐯1𝐯2\mathbf{v}_{rel} = \mathbf{v}_{1} - \mathbf{v}_{2}), on obtient

Calcul du multiplicateur d’impulsion 𝐤\mathbf{k} pour la SuperBall

k=(e+1)𝐯rel𝐧(1/m1+1/m2)𝐧𝐧=(0.9+1)[4m/s4m/s][13](0+1/(50g))[13][13]=1.9(16m/s)10/(50g)=152gm/s.\begin{matrix} k & {= \frac{(e + 1)\mathbf{v}_{rel} \cdot \mathbf{n}}{(1/m_{1} + 1/m_{2})\,\mathbf{n} \cdot \mathbf{n}}} \\ & {= \frac{(0.9 + 1)\begin{bmatrix} {4\ {m/s}} \\ {4\ {m/s}} \\ \end{bmatrix} \cdot \begin{bmatrix} 1 \\ 3 \\ \end{bmatrix}}{(0 + 1/(50\ g))\,\begin{bmatrix} 1 \\ 3 \\ \end{bmatrix} \cdot \begin{bmatrix} 1 \\ 3 \\ \end{bmatrix}} = \frac{1.9\,(16\ {m/s})}{10/(50\ g)} = 152\ g\ {m/s}.} \\ \end{matrix}

Pour calculer la vitesse post-collision, nous ajoutons une impulsion de k𝐧k\mathbf{n} à la quantité de mouvement de la SuperBall. Comme la quantité de mouvement est la masse fois la vitesse, le changement de vitesse est égal à cette impulsion divisée par m2m_{2}, la masse de la SuperBall :

Calcul de la vitesse post-impulsion pour la SuperBall

𝐯2=𝐯2+k𝐧m2=[4m/s4m/s]+(152gm/s)[13]50g=[4m/s4m/s]+[3.04m/s9.12m/s]=[0.96m/s5.12m/s].\begin{matrix} \mathbf{v}_{2}^{\prime} & {= \mathbf{v}_{2} + \frac{k\mathbf{n}}{m_{2}} = \begin{bmatrix} {- 4\ {m/s}} \\ {- 4\ {m/s}} \\ \end{bmatrix} + \frac{(152\ g\ {m/s})\,\begin{bmatrix} 1 \\ 3 \\ \end{bmatrix}}{50\ g}} \\ & {= \begin{bmatrix} {- 4\ {m/s}} \\ {- 4\ {m/s}} \\ \end{bmatrix} + \begin{bmatrix} {3.04\ {m/s}} \\ {9.12\ {m/s}} \\ \end{bmatrix} = \begin{bmatrix} {- 0.96\ {m/s}} \\ {\ \ 5.12\ {m/s}} \\ \end{bmatrix}.} \\ \end{matrix}

Avant de montrer cette vitesse graphiquement, regardons le sac de sable. Nous traitons la collision avec le sac de sable comme presque complètement inélastique et utilisons e=0.01e = 0.01. Hormis le changement de ee, la procédure est la même que pour la SuperBall :

Calcul du multiplicateur d’impulsion 𝐤\mathbf{k} et de la vitesse post-impulsion pour le sac de sable

k=(e+1)𝐯rel𝐧(1/m1+1/m2)𝐧𝐧=1.01(16m/s)10/(50g)=80.8gm/s,𝐯2=𝐯2+k𝐧m2=[4m/s4m/s]+(80.8gm/s)[13]50g=[2.38m/s0.85m/s].\begin{matrix} k & {= \frac{(e + 1)\mathbf{v}_{rel} \cdot \mathbf{n}}{(1/m_{1} + 1/m_{2})\,\mathbf{n} \cdot \mathbf{n}} = \frac{1.01\,(16\ {m/s})}{10/(50\ g)} = 80.8\ g\ {m/s},} \\ \mathbf{v}_{2}^{\prime} & {= \mathbf{v}_{2} + \frac{k\mathbf{n}}{m_{2}} = \begin{bmatrix} {- 4\ {m/s}} \\ {- 4\ {m/s}} \\ \end{bmatrix} + \frac{(80.8\ g\ {m/s})\,\begin{bmatrix} 1 \\ 3 \\ \end{bmatrix}}{50\ g} = \begin{bmatrix} {- 2.38\ {m/s}} \\ {\ \ 0.85\ {m/s}} \\ \end{bmatrix}.} \\ \end{matrix}

Remarquez que le coefficient de restitution réduit a causé que le sac de sable reçoive une plus petite échelle d’impulsion, et la vitesse de rebond résultante était également plus faible. Cette différence est montrée graphiquement dans la Figure 12.15. Pour comparaison, nous avons également inclus une collision parfaitement élastique (e=1e = 1). La collision parfaitement inélastique (e=0e = 0) est très proche du résultat du sac de sable et n’est pas représentée.

image

Figure 12.15 Vitesses post-impact pour différentes valeurs de ee, le coefficient de restitution

Il est évident d’après la trajectoire du sac de sable dans la Figure 12.15 qu’un aspect important des collisions n’est pas capturé par le modèle : le frottement. La vitesse perpendiculaire à la normale est la même avant et après la collision. Nous nous attendrions à ce qu’un objet comme un sac de sable perde beaucoup de vitesse horizontale à la suite de la collision — en fait, il pourrait s’arrêter complètement. La bonne chose à faire est d’ajouter une composante perpendiculaire à l’impulsion. Cependant, une gestion correcte du frottement est, en général, une affaire délicate, et elle reste à la pointe de la recherche en simulation en temps réel. De nombreuses méthodes actuelles pour calculer l’impulsion horizontale (surtout pour le contact glissant) relèvent de la catégorie « complètement bidonnées ».

Dans l’exemple précédent, nous n’avions qu’un seul objet « vivant » et l’autre objet était inerte. Il s’agit d’un cas particulier, et les équations pourraient être simplifiées. (Comme nous l’avons mentionné plus tôt, la masse du projectile s’annule et n’est pas nécessaire.) Dans l’Exercice 9, nous vous demandons de réfléchir à ce qui se passerait si la collision de Grant et Kari n’était pas parfaitement inélastique ; la pleine puissance de cette loi est nécessaire dans ce cas. Nous montrons comment gérer les collisions où les objets sont libres de tourner dans la Section 12.5.4.

Nous avons supposé jusqu’ici que les objets sont en contact, mais ne se pénètrent pas encore. Ce n’est peut-être pas le cas, selon la stratégie générale utilisée pour résoudre les collisions. Une technique consiste à essayer d’inverser la simulation dans le temps jusqu’au point de contact. Cela peut être difficile à faire efficacement car il y a souvent de très nombreuses collisions qui se produisent à des moments différents dans un seul pas de temps. De plus, définir « exactement en contact » est difficile avec l’arithmétique à virgule flottante. Une autre stratégie consiste à simplement permettre la pénétration, et d’appliquer l’impulsion à des objets qui se pénètrent déjà. Dans ce cas, l’impulsion doit faire plus que supprimer la vélocité relative pour prévenir (d’autres) pénétrations. La vélocité relative résultante doit être suffisamment grande pour séparer les objets d’ici la fin du pas de temps, après avoir été intégrée dans la position. En d’autres termes, les positions des objets seront avancées à un taux selon les vitesses calculées ; après cette mise à jour, la pénétration doit être résolue. Ou du moins elle doit être principalement résolue. Il y a certains avantages à permettre une légère pénétration. Toutes ces questions sont un peu en dehors du domaine des principes établis et relèvent davantage de la recherche actuelle,17 et ne seront pas discutées ici.

12.4.3Le delta de Dirac

Avant de quitter la dynamique linéaire et de parler de dynamique rotationnelle, mentionnons brièvement un élément de notation mathématique que vous pourriez voir, notamment dans le contexte des impulsions. Comme nous l’avons dit, de nombreux phénomènes naturels (tels que la quantité de mouvement) ne changent pas instantanément en théorie, mais pour des besoins pratiques, nous les traitons comme s’ils changeaient instantanément. De plus, il est souvent le cas qu’un ensemble d’outils mathématiques existe pour gérer les fonctions continues (ou, de façon équivalente, les « signaux »), et nous souhaitons appliquer ces outils aux signaux avec des discontinuités. Il existe un bon bidouillage mathématique qui peut être utilisé pour encoder une discontinuité dans une fonction de sorte qu’elle puisse être intégrée. Il est connu sous le nom de delta de Dirac, et est généralement noté avec la lettre minuscule delta, par exemple δ(a)\delta(a).

Le symbole δ(t)\delta(t) est un type spécial de « fonction », qui est une pointe, ou impulsion. Sa valeur est zéro partout sauf à t=0t = 0, où elle est infinie. Mais les valeurs réelles du delta de Dirac ne doivent pas être prises trop littéralement — ce qui est plus important, c’est que son intégrale (l’« aire » de cette pointe infinie) est égale à 1. La meilleure façon de penser au delta de Dirac est comme une boîte centrée en 00 de largeur ww et de hauteur 1/w1/w. (D’autres formes peuvent être choisies, mais le point important est que la forme doit avoir une aire unitaire.) Le delta de Dirac est défini comme la limite d’une telle fonction, lorsque la largeur tend vers zéro et que la hauteur tend vers l’infini, tout en maintenant l’aire unitaire. Nous suivons le conseil de Bracewell [2], qui est d’éviter d’utiliser le terme « fonction » en se référant à des, hm, « fonctions » spéciales telles que le delta de Dirac, et d’utiliser plutôt le mot « symbole ». En effet, chaque fois que nous voyons le symbole delta de Dirac, l’expression entière qui l’entoure doit être interprétée comme une limite. Nous considérons la limite, lorsque la largeur tend vers zéro, d’une forme avec une aire unitaire centrée à l’origine.

Armé du delta de Dirac, nous pouvons différentier des fonctions avec des discontinuités. Par exemple, disons que la vitesse d’une balle de baseball frappée par une batte au temps t=2t = 2 est approximée par la fonction discontinue

v(t)={130ft/st<2,130ft/st2.v(t) = \left\{ \begin{matrix} {- 130\ {ft/s}} & {t < 2,} \\ {130\ {ft/s}} & {t \geq 2.} \\ \end{matrix} \right.

Nous pouvons différentier cette expression en utilisant le delta de Dirac comme

v(t)=260δ(t2),v^{\prime}(t) = 260\,\delta(t - 2),

ce qui peut être lu comme « une impulsion de magnitude 260 à 2 ». Rappelons que le symbole δ\delta n’est pas une fonction ordinaire, et nous interprétons donc ce qui précède comme « la limite d’un changement total de vitesse de 260 ft/s qui se produit sur un intervalle de durée Δt\Delta t entourant le temps t=2t = 2, quand Δt\Delta t tend vers zéro. »

Le delta de Dirac apparaît dans divers contextes où des outils des mathématiques continues sont appliqués à des signaux discontinus. Par exemple, en graphisme, l’image en espace écran est un signal avec des discontinuités inhérentes, et nous devons échantillonner ce signal et le reconstruire. L’entrée de l’utilisateur via le contrôleur est un autre signal qui présente des discontinuités. Le delta de Dirac et d’autres symboles connexes (tels que la fonction rampe et la fonction de Heaviside) sont utiles pour discuter et manipuler de tels signaux.

12.5Dynamique rotationnelle

Nous sommes maintenant prêts à étendre les idées que nous avons apprises sur les particules aux corps rigides. Les particules ont une position, mais jusqu’ici, nous ne nous sommes pas préoccupés de l’orientation. De même, les particules ont une masse, mais jusqu’ici, nous n’avons pas réfléchi à la taille ou à la forme d’une particule et à la façon dont cette masse était distribuée. Les grandeurs linéaires et les lois clés ont chacune des analogues rotationnels, et il existe une certaine belle correspondance entre elles. Cette correspondance est certainement pédagogiquement commode et sera exploitée dans notre discussion. Comme nous l’avons fait pour la dynamique linéaire, nous définissons d’abord les grandeurs cinématiques de base et considérons les questions liées à la description de la rotation sans nous préoccuper des causes de la rotation. Nous examinons ensuite les analogues rotationnels de la masse, de la force et de la quantité de mouvement, bien que nous abordions ces sujets dans un ordre différent.

Vous pourriez remarquer que cette section est étonnamment brève, à la fois par rapport à notre discussion sur les questions linéaires, et aussi par rapport à des présentations similaires d’autres sources. Il y a deux raisons à cela. Premièrement, nous avons passé beaucoup de temps dans le chapitre précédent à développer l’intuition sur les dérivées et la dynamique linéaire, et ces idées n’ont pas besoin d’être répétées ici — bien qu’il y aura quelques différences importantes concernant l’intégration du déplacement angulaire. Deuxièmement, il y a certains prérequis qui sont généralement regroupés dans cette discussion dans les manuels de physique traditionnels ; dans ce livre, il a été plus approprié de les placer ailleurs. Vous devriez vous assurer d’avoir lu et compris ces prérequis avant de lire le reste de cette section. En particulier, nous utilisons le produit vectoriel, que nous avons couvert dans la Section 2.12, et les méthodes de base pour décrire la rotation en trois dimensions, qui faisaient l’objet du Chapitre 8.

12.5.1Cinématique rotationnelle

Le Chapitre 11 portait sur la cinématique linéaire : nous considérions une fonction 𝐩(t)\mathbf{p}(t) qui décrivait la position d’une particule en fonction du temps. Nous considérions également ses première et deuxième dérivées, les fonctions vélocité et accélération, que nous notions 𝐯(t)=𝐩˙(t)\mathbf{v}(t) = \overset{˙}{\mathbf{p}}(t) et 𝐚(t)=𝐩¨(t)\mathbf{a}(t) = \overset{¨}{\mathbf{p}}(t), respectivement. L’analogue rotationnel de la position est, bien sûr, l’orientation. Plusieurs méthodes peuvent être utilisées pour décrire l’orientation d’un corps. Un nombre considérable de pages a été consacré à expliquer et comparer ces méthodes dans le Chapitre 8, et dans ce chapitre, nous supposons que vous êtes familier avec les bases. Dans un simulateur de corps rigide, il est courant de garder des copies redondantes de l’orientation dans des formats alternatifs. En général, à la fois un quaternion et une matrice de rotation sont maintenus. Nous adopterons ici une politique similaire avec notre notation. Nous laissons 𝐑(t)\mathbf{R}(t) être la matrice de rotation objet-vers-vertical au temps tt ; c’est l’orientation du corps exprimée sous forme matricielle. Nous utilisons aussi 𝐪(t)\mathbf{q}(t) pour désigner cette même rotation sous forme de quaternion. Bien que les deux fonctions expriment la même valeur, ce sont des « types de données » différents.

L’analogue de la vélocité et de l’accélération linéaires s’appellent la vélocité angulaire et l’accélération angulaire. Nous les notons respectivement ωω(t){\omega\omega}(t) et αα(t){\alpha\alpha}(t), et ces deux grandeurs sont des vecteurs 3D, ou des cartes exponentielles infinitésimales (voir la Section 8.4) si vous voulez. Nous avons pu définir la vélocité linéaire comme la dérivée temporelle de la position, mais les choses sont un peu plus compliquées avec l’orientation. En général, ωω(t){\omega\omega}(t) n’est pas la dérivée de l’orientation dans quelque format que ce soit (même la carte exponentielle). Nous avons plus à dire là-dessus quand nous examinerons ce que sont vraiment les dérivées des valeurs angulaires dans la Section 12.6.4.

Donc, notre premier ordre du jour est de comprendre comment exprimer et mesurer la vélocité angulaire. C’est délicat, non seulement parce que la rotation en 3D est plus complexe que la position, mais aussi parce qu’il existe deux types légèrement différents de vélocité angulaire. Le premier est connu sous le nom de vélocité angulaire propre, et le second est la vélocité angulaire orbitale. La vélocité angulaire propre décrit le taux de variation de l’orientation d’un objet et n’est pas affectée par la translation de l’objet. La vélocité angulaire orbitale ne se préoccupe pas vraiment de l’orientation du tout ; au lieu de cela, elle mesure le taux auquel la position d’un objet trace une orbite autour d’un autre point. Nous avons déjà introduit la vélocité angulaire orbitale dans la Section 11.8.2, donc si vous avez sauté cette section, ce serait le bon moment pour la revoir.

Pour voir la relation entre la vélocité angulaire propre et la vélocité angulaire orbitale, regardons un exemple. Considérons un objet qui tourne autour de son centre de masse 𝐜\mathbf{c}, qui est fixe dans l’espace. Pour décrire cette rotation, nous devons spécifier deux choses. Premièrement, nous décrivons la direction de la rotation ; nous choisissons de le faire en nommant 𝐧̂\hat{\mathbf{n}}, un vecteur unitaire parallèle à l’axe de rotation dont le signe (en combinaison avec la règle de la main gauche) établit une direction de rotation positive. Notez que 𝐧̂\hat{\mathbf{n}} nous donne uniquement la direction de l’axe ; la position vient de notre hypothèse que l’axe passe par le centre de masse 𝐜\mathbf{c}. L’autre élément nécessaire pour décrire la rotation est, bien sûr, le taux de rotation, que nous mesurons en radians par unité de temps et notons par le scalaire ω\omega. Maintenant, nous pouvons définir la vélocité angulaire propre du corps rigide par le vecteur de vélocité angulaire ωω\omega\omega (noter le gras), qui est simplement la multiplication du taux de rotation par l’axe :

ωω=ω𝐧̂.{\omega\omega} = \omega\hat{\mathbf{n}}.

Ces idées vous sont familières, si vous avez lu la Section 8.4, qui parlait des cartes exponentielles, et la Section 11.8.2, qui discutait de la vélocité circulaire uniforme d’une particule et définissait la vélocité orbitale. Si c’est le cas, vous pouvez probablement déjà voir le lien entre la vélocité angulaire propre et la vélocité angulaire orbitale.

Vélocité angulaire propre et orbitale

La vélocité angulaire propre d’un corps rigide est égale à la vélocité angulaire orbitale de chaque point du corps rigide.

Quand on parle de vélocité angulaire orbitale, il faut être clair sur quel point 𝐨\mathbf{o} nous mesurons la vélocité angulaire par rapport à. Nous ne mesurons pas la vélocité angulaire orbitale par rapport au centre de masse 𝐜\mathbf{c} ! Nous mesurons la vélocité angulaire orbitale par rapport au point qui est réellement en orbite, et seuls les points sur l’« équateur » de l’objet orbitent réellement autour de 𝐜\mathbf{c}. Pour tout autre point arbitraire, il orbitera autour d’un point 𝐨\mathbf{o} qui se trouve sur l’axe de rotation, comme le montre la Figure 12.16.

image

Figure 12.16 La vélocité angulaire propre du robot est la même que la vélocité orbitale de chaque point sur le robot, à condition de choisir 𝐨\mathbf{o} avec soin.

Maintenant, le lecteur perspicace aura peut-être remarqué une certaine circularité dans les définitions qui viennent d’être données. Nous avons dit que la vélocité angulaire propre du corps rigide est égale à la vélocité angulaire orbitale de chaque point, à condition que la vélocité orbitale soit mesurée par rapport au point le plus proche sur l’axe de rotation. Mais comment connaissions-nous l’axe de rotation en premier lieu ? La question est généralement sans objet car, à la fois dans les équations cinématiques analytiques et dans une simulation numérique dans un ordinateur, le vecteur de vélocité angulaire ωω\omega\omega est simplement l’une des variables d’état fondamentales que nous suivons, donc nous n’avons pas besoin de l’inférer à partir des vélocités de points. Néanmoins, il vaut la peine de souligner que cet axe est uniquement déterminé (jusqu’à l’inversion des signes). Rappelons que l’axe de rotation est perpendiculaire à la vélocité d’une particule en orbite. (Nous devons mesurer la vélocité de la particule par rapport au centre de masse de l’objet rigide, si le centre de masse est en mouvement.) Il n’y a qu’une seule direction qui soit simultanément perpendiculaire à toutes les vélocités de toutes les particules, et cette direction est l’axe de rotation.

Nous avons commencé avec « un exemple simple » d’un objet tournant autour d’un axe qui passe par son centre de masse, mais, comme il s’avère, c’est le cas général, du moins si nous considérons la vélocité instantanée. La seule simplification que nous avons faite est de fixer le centre de masse, mais, en général, un objet peut se translater ainsi que tourner. Il est quelque peu surprenant de réaliser, lorsqu’on imagine un objet culbutant dans l’espace, qu’il tournera toujours autour d’un axe passant par le centre de masse (bien que l’axe puisse être orienté arbitrairement). Lorsqu’un objet reçoit une force qui induit une rotation (connue sous le nom de couple, qui sera discuté bientôt), la rotation induite se produira toujours autour du centre de masse. En fait, faire tourner un objet autour d’un axe qui ne passe pas par le centre de masse nécessite l’application continue d’une force de contrainte. En l’absence de tout couple externe (disons que la force de contrainte est supprimée), l’objet tournera autour d’un axe passant par son centre de masse, et la vélocité angulaire sera constante — l’axe de rotation ne changera pas de direction, et le taux de rotation ne changera pas. Nous nous laissons aller un peu à parler des couples, mais nous voulions préciser que cette situation de vélocité angulaire est, en fait, la seule situation que nous devons comprendre.

Bien sûr, si des couples agissent sur l’objet, l’axe et le taux de rotation changeront dans le temps. Cela nous amène à considérer l’accélération angulaire, qui est une grandeur vectorielle que nous notons αα\alpha\alpha. La vélocité angulaire n’était pas simplement la dérivée de l’orientation, comme on pourrait naïvement s’y attendre par analogie avec les homologues linéaires. Cependant, l’analogie fonctionne pour l’accélération angulaire, qui est la dérivée temporelle vectorielle de la vélocité angulaire :

αα(t)=ωω˙(t).{\alpha\alpha}(t) = \overset{˙}{\omega\omega}(t).

L’analogie avec l’équation linéaire 𝐚(t)=𝐯˙(t)\mathbf{a}(t) = \overset{˙}{\mathbf{v}}(t) est claire.

12.5.2Dynamique rotationnelle 2D

Maintenant que nous avons défini les grandeurs cinématiques simples impliquées — ce qui était principalement un exercice de notation et de réutilisation des idées développées ailleurs — considérons la dynamique de la rotation. Nous simplifions d’abord la situation au cas de la rotation dans le plan (ou, alternativement, nous pouvons penser à cela comme fixer l’axe de rotation). Dans cette situation, la vélocité et l’accélération angulaires sont des grandeurs scalaires plutôt que vectorielles, car il n’y a qu’un seul degré de liberté. Après avoir développé quelques idées de base en deux dimensions dans cette section, nous étendons ces idées à trois dimensions dans la Section 12.5.3.

Imaginez un point de masse mm attaché à un disque rigide dont la masse est négligée. Le centre du disque est fixé à un pivot, et cela contraint la masse à un trajet circulaire. Soit 𝐫\mathbf{r} le vecteur du pivot à la masse. Ainsi, le rayon orbital de la masse est r=𝐫r = {\parallel \mathbf{r} \parallel}. Nous traçons une ligne sur le disque depuis son centre vers l’extérieur, et nous supposons que nous pouvons fixer la masse au disque à n’importe quelle distance rr le long de cette ligne. Notez que le rayon du disque lui-même (étant sans masse) n’est pas pertinent, donc essayez d’éteindre votre intuition qu’un très grand disque serait difficile à faire tourner. La seule source de résistance à la rotation — la seule source d’inertie — est la masse ponctuelle. Nous négligeons l’inertie du disque.

Considérons ce qui se passe lorsqu’une force 𝐟\mathbf{f} est appliquée directement en mm. Selon la deuxième loi de Newton, la masse veut accélérer dans la direction de 𝐟\mathbf{f}. Cependant, toute portion de 𝐟\mathbf{f} parallèle à 𝐫\mathbf{r} sera repoussée par une force de contact du disque et n’aura aucun effet sur la masse. En revanche, la portion de 𝐟\mathbf{f} perpendiculaire à 𝐫\mathbf{r}, tangentielle à l’orbite de la masse, fera accélérer la masse ponctuelle. Soit FF la magnitude de 𝐟\mathbf{f}, et FF_{\bot} la quantité de 𝐟\mathbf{f} perpendiculaire à 𝐫\mathbf{r}. Ceci est représenté dans la Figure 12.17.

image

Figure 12.17 Un disque est contraint de tourner autour de 𝐨\mathbf{o}. Une masse mm est attachée au disque à un rayon rr, et une force 𝐟\mathbf{f} est appliquée sur la masse.

Avec un peu de trigonométrie, nous pouvons calculer FF_{\bot} à partir de ϕ\phi, qui est l’angle entre 𝐟\mathbf{f} et 𝐫\mathbf{r} :

F/F=sin(πϕ),(πϕest l’angle intérieur)F/F=sinπcosϕcosπsinϕ,F/F=(0)cosϕ(1)sinϕ,F=Fsinϕ.\begin{matrix} {F_{\bot}/F} & {= \sin(\pi - \phi),} & & {(\pi - \phi\ \text{est l'angle intérieur})} \\ {F_{\bot}/F} & {= \sin\pi\cos\phi - \cos\pi\sin\phi,} & & \\ {F_{\bot}/F} & {= (0)\cos\phi - ( - 1)\sin\phi,} & & \\ F_{\bot} & {= F\sin\phi.} & & \\ \end{matrix}

En appliquant la deuxième loi de Newton, nous pouvons calculer la magnitude de l’accélération tangentielle comme

a=F/m.a_{\bot} = F_{\bot}/m.

(Ne confondez pas l’accélération tangentielle, qui provoque un changement du taux de rotation, avec l’accélération centripète, qui est créée par la force de contact avec le disque et maintient le trajet orbital.)

Par définition, l’accélération tangentielle linéaire 𝐚=𝐩¨\mathbf{a} = \overset{¨}{\mathbf{p}} est simultanément une accélération angulaire α=θ¨\alpha = \overset{¨}{\theta} autour du pivot, et elles sont liées par

α=a/r.\alpha = a_{\bot}/r.

Pour comprendre d’où cela vient, rappelons de la Section 11.8.1 la relation entre la vitesse linéaire et la vélocité angulaire : v=s=rωv_{\bot} = s = r\omega.

image

Figure 12.18 Appliquer une force à un point arbitraire sur le disque avec le bras de levier 𝐥\mathbf{l}.

Imaginez maintenant que nous gardons la masse fixée à rr, mais qu’au lieu d’appliquer notre force directement sur la masse, nous poussons contre un piton qui sort du disque à un autre endroit, à une distance l=𝐥l = {\parallel \mathbf{l} \parallel}. Le vecteur 𝐥\mathbf{l} va du point d’appui 𝐨\mathbf{o} au point où la force est appliquée et est connu sous le nom de bras de levier. C’est représenté dans la Figure 12.18.

Permettez-nous de clarifier un point potentiellement confus. Précédemment, dans la Figure 12.17, les vecteurs 𝐫\mathbf{r} et 𝐥\mathbf{l} étaient les mêmes, car nous appliquions la force directement sur la masse ponctuelle (unique). Mais en général, la masse est distribuée autour du disque, donc il y a plusieurs mm et 𝐫\mathbf{r}. La portion de la force appliquée qui est efficace pour faire tourner le disque est perpendiculaire au bras de levier, pas au vecteur rayon 𝐫\mathbf{r}, comme vous pourriez le déduire de la Figure 12.17.

Considérons comment les changements au bras de levier affectent les accélérations résultantes. Premièrement, notons que si nous appliquons la force n’importe où sur le cercle de même rayon que la masse, ce qui signifie l=rl = r, alors l’ensemble de l’appareillage gagne de la quantité de mouvement angulaire, comme si nous avions poussé directement contre la masse. En d’autres termes, la seule chose qui importe à propos de 𝐥\mathbf{l} est la distance depuis le point d’appui l=𝐥l = {\parallel \mathbf{l} \parallel} et l’angle ϕ\phi entre le bras de levier et la force appliquée. Faire tourner à la fois le bras de levier et la force appliquée ne change pas l’accélération angulaire résultante.

Si le piton est plus proche du point d’appui que la masse (l<rl < r), alors nous devons pousser plus fort pour produire la même accélération de la masse. Si l>rl > r, une force plus petite fera l’affaire. Ainsi, augmenter le bras de levier ll a un effet proportionnel sur l’accélération tangentielle aa_{\bot} de la masse. C’est le principe de base de l’avantage mécanique d’un levier, qu’Archimède a découvert. Mais quel effet le changement de ll a-t-il sur α\alpha, l’accélération angulaire de l’appareillage ? Elle aussi est directement proportionnelle : si nous poussons sur le disque à un point deux fois plus loin, l’accélération angulaire est deux fois plus grande. C’est clair d’après la relation α=a/r\alpha = a_{\bot}/r. Si cela semble trop évident pour mériter d’être mentionné, continuez à lire.

Résumons ce que nous avons découvert. Lorsqu’une force est appliquée à un objet, elle tend à le faire tourner. Cette « cause » de l’accélération angulaire est connue sous le nom de couple, que nous notons en utilisant la lettre grecque tau :18 ττ\tau\tau. Bien que l’accélération linéaire d’un corps résultant d’une force appliquée ne dépende pas de l’endroit où la force est appliquée, la quantité de couple qui résulte d’une force appliquée dépend de la façon dont la force est appliquée efficacement. L’efficacité de la force à créer une accélération rotationnelle — la magnitude du couple — dépend de plusieurs facteurs :

En deux dimensions, nous pouvons énoncer cela de façon concise par

Couple en deux dimensions

τ=Flsinϕ.\begin{matrix} \tau & {= Fl\sin\phi.} \\ \end{matrix}

Les dimensions du couple ne sont pas les mêmes que la force. Le couple a des unités de « force fois longueur ». L’unité SI pour le couple est le Newton-mètre. (C’est dimensionnellement équivalent au joule, mais le couple et l’énergie sont des concepts distincts, et le joule n’est pas vraiment l’unité appropriée à utiliser pour le couple.)

Il peut ne pas être intuitivement évident que le couple augmente avec la longueur du bras de levier. Par exemple, votre intuition pourrait vous incliner à penser qu’il serait plus difficile de pousser à un rayon accru car vous devez pousser plus vite juste pour suivre. Si c’est le cas, votre intuition est fausse, mais ne vous sentez pas mal. Notre expérience avec la force se fait souvent via un type de poussée physique quotidienne comme nous pourrions en faire avec nos mains contre un objet. Mais ce n’est pas nécessairement un bon exemple car la poussée doit aller de plus en plus vite à mesure que l’objet accélère pour maintenir le contact. Mais la vitesse d’une source de force n’a rien à voir avec la magnitude de la force elle-même. Alors essayez de remplacer la poussée physique par une rafale de vent ou un coup rapide (une impulsion). Vous pouvez conduire cette expérience sur une porte. Si vous soufflez sur la porte ou la frappez près de la charnière (bras de levier plus court), votre action ne la fera pas tourner aussi facilement que si vous faites la même chose près du côté avec la poignée (bras de levier plus long). C’est exactement pourquoi nous plaçons les poignées de porte du côté opposé à la charnière : pour faciliter l’ouverture de la porte !

La relation entre le couple et la force est importante à comprendre. Toute force appliquée à un corps peut produire à la fois une accélération linéaire et un couple. Bien sûr, c’est la force nette et le couple qui déterminent la (les) accélération(s) du corps. Deux exemples clés dans la Figure 12.19 illustrent ce point. À gauche, une force agit le long d’une ligne qui passe par le centre de masse, résultant en aucun couple. Dans ce cas, sinϕ=0\sin\phi = 0 car la ligne d’action de la force est parallèle au bras de levier. Le côté droit de la Figure 12.19 montre un cas extrême différent : deux forces de magnitudes égales mais de directions opposées agissent sur des bras de levier opposés. Une paire de forces coordonnées ainsi est connue sous le nom de couple de forces, et elles résultent en un couple net, mais en une force linéaire nette nulle. Quand vous serrez un boulon avec une clé, ce que vous faites vraiment, c’est fournir deux forces de contact ou plus. La direction et les bras de levier de ces forces de contact sont coordonnés en un schéma circulaire pour produire un couple, mais une force linéaire nette (presque) nulle.

image

Figure 12.19 À gauche, la ligne d’action passe par le centre de masse, résultant en une accélération linéaire mais aucun couple. À droite, un couple de forces produit un couple mais aucune accélération linéaire.

Dans une simulation numérique, les couples peuvent provenir de plusieurs sources. Une source courante est une force (linéaire) appliquée à un certain bras de levier, les collisions étant la source de couples la plus courante de toutes. Une force impulsive appliquée à un objet peut résulter en une impulsion angulaire (également connue sous le nom de couple impulsif). Similaire à une impulsion linéaire, une impulsion angulaire est un changement instantané de quantité de mouvement angulaire, et nous pouvons penser à cela comme le résultat d’un grand couple agissant pendant une courte durée. Nous pourrions également demander au moteur physique d’appliquer automatiquement des couples (peut-être limités à une magnitude maximale) sur un objet afin d’imposer une contrainte angulaire. Les ressorts angulaires et les moteurs en sont des exemples. Enfin, nous pourrions avoir une raison d’ajouter un couple à volonté à n’importe quel objet sans qu’il y ait de force linéaire correspondante.

Revenons à notre expérience de pensée avec la masse attachée au disque rotatif. Et si nous fixons le bras de levier ll, et à la place faisons varier rr, la distance radiale entre la masse et le pivot ? Le même principe du levier est à l’œuvre, mais en sens inverse. La force (et donc l’accélération tangentielle aa_{\bot}) ressentie par la masse sera inversement proportionnelle à rr. Autrement dit, l’inertie effective de la masse — sa résistance à l’accélération linéaire — est proportionnelle à rr. Mais qu’en est-il de la capacité de l’appareillage à résister à l’accélération angulaire ? Comment son moment d’inertie change-t-il à mesure que nous faisons varier rr ? Le moment d’inertie n’est pas proportionnel à rr, il est proportionnel à r2r^{2} ! Pour voir pourquoi, considérons que si nous augmentons ll et rr du même facteur, alors l’accélération tangentielle aa_{\bot} ressentie par la masse est inchangée. Cependant, à ce rayon accru, la même accélération tangentielle correspond maintenant à une accélération angulaire réduite, due à la relation α=a/r\alpha = a_{\bot}/r.

En résumé, le moment d’inertie d’un objet, qui doit être mesuré par rapport à un pivot particulier (dans ce cas, c’est le point de pivot fixe, mais pour un corps rigide, nous le mesurons généralement par rapport à son centre de masse), quantifie le degré auquel l’objet résistera à l’accélération angulaire autour de ce pivot. Le moment d’inertie JJ d’une masse ponctuelle est proportionnel à sa masse et proportionnel au carré de la distance entre la masse et le pivot.

Moment d’inertie d’une masse ponctuelle dans le plan

J=mr2.\begin{matrix} J & {= mr^{2}.} \\ \end{matrix}

Imaginez maintenant que le disque dans notre expérience de pensée a plusieurs masses placées dessus. Chacune de ces masses contribue à la résistance à la rotation du disque, et leur contribution est la même, quelle que soit la direction dans laquelle une force est appliquée. Pour calculer le moment d’inertie d’un corps rigide arbitraire, nous divisons l’objet en « éléments de masse » tels que pour chaque élément nous connaissons la masse mim_{i} et la distance radiale au centre de masse rir_{i}. Nous additionnons ensuite les moments d’inertie de chaque élément de masse individuel :

Moment d’inertie d’un corps rigide

J=iJi=imiri2.\begin{matrix} J & {= \sum\limits_{i}J_{i} = \sum\limits_{i}m_{i}r_{i}^{2}.} \\ \end{matrix}

Travaillons quelques exemples instructifs.

image

Figure 12.20 La distribution de masse peut affecter le moment d’inertie. Chacun des exemples ci-dessus a la même masse totale.

Considérons les quatre disques de la Figure 12.20. Comme chaque disque a trois masses, nous commençons par développer la somme dans l’Équation (12.25) en J=m1r12+m2r22+m3r32J = m_{1}{r_{1}}^{2} + m_{2}{r_{2}}^{2} + m_{3}{r_{3}}^{2} :

  1. (a) J=232+222+212=18+8+2=28J = 2 \cdot 3^{2} + 2 \cdot 2^{2} + 2 \cdot 1^{2} = 18 + 8 + 2 = 28 ;

  2. (b) J=232+232+232=18+18+18=54J = 2 \cdot 3^{2} + 2 \cdot 3^{2} + 2 \cdot 3^{2} = 18 + 18 + 18 = 54 ;

  3. (c) J=332+222+112=27+8+1=36J = 3 \cdot 3^{2} + 2 \cdot 2^{2} + 1 \cdot 1^{2} = 27 + 8 + 1 = 36 ;

  4. (d) J=132+222+312=9+8+3=20J = 1 \cdot 3^{2} + 2 \cdot 2^{2} + 3 \cdot 1^{2} = 9 + 8 + 3 = 20 .

Mis à part la pratique mécanique que cet exemple offre, il met en évidence un fait crucial : la distribution de masse au sein de l’objet peut avoir un effet profond sur le moment d’inertie. Remarquez les moments d’inertie très différents, malgré le fait que chacun de ces disques a une masse totale de 6. Comparez cela à l’inertie linéaire, où déplacer la masse n’en facilitera pas l’accélération. La seule chose qui importe pour l’accélération linéaire est la masse totale. De plus, en trois dimensions, bien que la masse linéaire puisse encore être quantifiée par un scalaire, le moment d’inertie ne peut pas être décrit par un seul nombre, en raison de sa dépendance à la distribution de masse.

Quand nous prenons la limite lorsque le nombre d’éléments de masse atteint l’infini, l’Équation (12.25) devient une intégrale. Heureusement, des formules pour les moments d’inertie de nombreuses formes courantes, telles que les sphères, cylindres, anneaux, etc., peuvent être trouvées sur Internet.

La deuxième loi de Newton, F=maF = ma, a un équivalent rotationnel simple.

Équivalent rotationnel de la deuxième loi de Newton

τ=Jα.\begin{matrix} {\tau = J\alpha.} \\ \end{matrix}

Pour la rotation dans un plan, toutes les variables de l’Équation (12.26) sont des scalaires. En trois dimensions, cependant, τ\tau et α\alpha deviennent des grandeurs vectorielles, et JJ devient une matrice. La Section 12.5.3 en discute.

Nous avons considéré le couple, l’analogue rotationnel de la force linéaire. Tournons maintenant notre attention vers la quantité de mouvement. Rappelons que la quantité de mouvement linéaire est la « quantité de mouvement » contenue dans un objet. Son analogue, la quantité de mouvement angulaire, a une interprétation similaire. Intuitivement, la quantité de mouvement angulaire décrit à quel point il sera difficile d’arrêter la rotation de l’objet. Si la quantité de mouvement angulaire est grande, alors la magnitude du couple appliqué, ou la durée pendant laquelle il est appliqué, ou les deux, doivent être grandes.

Dans notre discussion sur la quantité de mouvement linéaire, nous avons rencontré deux façons de concevoir la quantité de mouvement. La première consistait à interpréter la quantité de mouvement dans un « sens instantané » comme le produit de la masse et de la vitesse en utilisant P=mvP = mv. L’équivalent rotationnel est présenté dans l’Équation (12.27).

Quantité de mouvement angulaire de spin

La quantité de mouvement angulaire ( LL ) est le produit du moment d’inertie JJ et de la vitesse angulaire ( ω\omega ) :

L=Jω.\begin{matrix} {L = J\omega.} \\ \end{matrix}

Alternativement, nous pouvons calculer la quantité de mouvement angulaire pour une masse ponctuelle individuelle directement à partir de sa quantité de mouvement linéaire par

Relation entre la quantité de mouvement linéaire et angulaire

L=rPsinϕ,\begin{matrix} {L = rP\sin\phi,} \\ \end{matrix}

PP est la quantité de mouvement linéaire. Le rôle du terme sinϕ\sin\phi est le même que dans le calcul du couple : il isole le mouvement tangentiel. Si la trajectoire est connue comme étant orbitale, ce terme peut être omis car il sera toujours égal à l’unité. Notez que puisque l’Équation (12.28) contient un facteur rr, elle s’applique uniquement à la quantité de mouvement angulaire orbitale. L’Équation (12.27) peut aussi être utilisée pour la quantité de mouvement angulaire orbitale, à condition que JJ et ω\omega soient tous deux mesurés par rapport au même pivot, mais l’Équation (12.27) est probablement plus appropriée pour la quantité de mouvement angulaire de spin d’un corps rigide, où JJ mesure le moment d’inertie de l’ensemble du corps. Dans tous les cas, la quantité de mouvement angulaire de spin d’un corps rigide peut être calculée en décomposant l’objet en éléments de masse et en prenant la somme des quantités de mouvement angulaires orbitales de ces éléments. Voici plusieurs façons dont la somme peut être accomplie :

Quantité de mouvement angulaire de spin d’un corps rigide

L=ωJ=ω(iJi)=iJiω=i(ri2mi)ω=irimi(riω)=irimivi=iriPi=iLi.\begin{matrix} L & {= \omega J = \omega\left( \sum\limits_{i}J_{i} \right) = \sum\limits_{i}J_{i}\omega = \sum\limits_{i}({r_{i}}^{2}m_{i})\omega} \\ & {= \sum\limits_{i}r_{i}m_{i}(r_{i}\omega) = \sum\limits_{i}r_{i}m_{i}v_{i} = \sum\limits_{i}r_{i}P_{i} = \sum\limits_{i}L_{i}.} \\ \end{matrix}

Ici les variables indexées font référence aux valeurs d’une particule particulière. Notez que nous avons supprimé le terme sinϕ\sin\phi en supposant que chaque particule suit une trajectoire orbitale.

La seconde interprétation de la quantité de mouvement linéaire que nous avons abordée est celle de la quantité de mouvement comme intégrale temporelle de la force. Lorsque nous appliquons une force sur le temps, la quantité de mouvement linéaire s’accumule. Une relation similaire existe entre la quantité de mouvement angulaire et le couple. Lorsqu’un couple est appliqué sur le temps, il accumule de la quantité de mouvement angulaire ; de manière équivalente, le couple est égal au taux de variation (dérivée) de la quantité de mouvement angulaire. Comme pour la quantité de mouvement linéaire, cela peut être interprété comme une loi de conservation.

Couple et conservation de la quantité de mouvement angulaire

L=τdt,τ=dLdt.\begin{matrix} L & {= \int\tau\ dt,} & \tau & {= \frac{dL}{dt}.} \\ \end{matrix}

En l’absence de couple externe, la quantité de mouvement angulaire est conservée.

12.5.3Dynamique rotationnelle en 3D

Étendons maintenant les principes de base développés dans la Section 12.5.2 aux trois dimensions. Commençons par revoir les grandeurs cinématiques rotationnelles en 3D. L’angle unique θ\theta est remplacé par un tenseur de rotation d’un certain type, une matrice de rotation 𝐑\mathbf{R} ou un quaternion 𝐪\mathbf{q} étant les méthodes les plus courantes pour décrire l’orientation dans les simulations générales de corps rigides. La vitesse angulaire ω\omega et l’accélération α\alpha deviennent des grandeurs vectorielles et sont écrites en gras comme ωω\omega\omega et αα\alpha\alpha, respectivement.

Pour étendre les principes dynamiques aux trois dimensions, nous commençons par le couple. Sans surprise, le couple devient une grandeur vectorielle notée ττ\tau\tau, et la direction de ce vecteur indique l’axe autour duquel le couple tend à induire une rotation. (Nous examinerons plus tard ce qui se passe si l’objet tourne déjà autour d’un axe différent.) La formule de calcul du couple pour une force appliquée 𝐟\mathbf{f} et un bras de levier 𝐥\mathbf{l} est en fait plus simple en 3D que la formule 2D correspondante !

Couple en trois dimensions

ττ=𝐥×𝐟.\begin{matrix} {\tau\tau} & {= \mathbf{l} \times \mathbf{f}.} \\ \end{matrix}

Comparez l’Équation (12.29) à τ=Flsinϕ\tau = Fl\sin\phi (l’Équation (12.24)), et remarquez que le produit vectoriel intègre les termes de magnitude et de sinϕ\sin\phi.

La quantité de mouvement angulaire devient également un vecteur 𝐋\mathbf{L}, avec une formule similaire pour sa relation à la grandeur linéaire :

Quantité de mouvement angulaire orbitale d’une particule en trois dimensions avec vecteur radial 𝐫\mathbf{r}

𝐋=𝐫×𝐏.\begin{matrix} \mathbf{L} & {= \mathbf{r} \times \mathbf{P}.} \\ \end{matrix}

Comparez cela à l’Équation (12.28).

Un lecteur attentif pourrait noter que l’Équation (12.28) n’est qu’une des deux équations que nous avons données pour la quantité de mouvement angulaire dans le plan—celle que nous avons jugée plus appropriée pour la vitesse angulaire orbitale d’une particule—et se demander ce qu’il en est de l’autre formule, l’Équation (12.27), qui était plus appropriée pour la vitesse angulaire de spin. Cette formule était L=JωL = J\omega, et pour obtenir son équivalent tridimensionnel, nous devons comprendre comment étendre JJ, le moment d’inertie, en trois dimensions. Heureusement, le lien entre les deux équations de quantité de mouvement est une excellente façon d’acquérir cette compréhension. Commençons par développer 𝐋=𝐫×𝐏\mathbf{L} = \mathbf{r} \times \mathbf{P}, avec l’objectif d’obtenir quelque chose qui ressemble à L=JωL = J\omega :

𝐋=𝐫×𝐏=𝐫×(m𝐯)=(m𝐫)×𝐯=(m𝐫)×(ω×𝐫)=m[rxryrz]×[ωyrzωzryωzrxωxrzωxryωyrx]=m[ry(ωxryωyrx)rz(ωzrxωxrz)rz(ωyrzωzry)rx(ωxryωyrx)rx(ωzrxωxrz)ry(ωyrzωzry)]=m[ryωxryryωyrxrzωzrx+rzωxrzrzωyrzrzωzryrxωxry+rxωyrxrxωzrxrxωxrzryωyrz+ryωzry]=m[(ry2+rz2)ωxryrxωyrzrxωzrxryωx+(rz2+rx2)ωyrzryωzrxrzωxryrzωy+(rx2+ry2)ωz]=(m[ry2+rz2ryrxrzrxrxryrz2+rx2rzryrxrzryrzrx2+ry2])[ωxωyωz].\begin{matrix} \mathbf{L} & {= \mathbf{r} \times \mathbf{P} = \mathbf{r} \times (m\mathbf{v}) = (m\mathbf{r}) \times \mathbf{v} = (m\mathbf{r}) \times (\omega \times \mathbf{r})} \\ & {= m\begin{bmatrix} r_{x} \\ r_{y} \\ r_{z} \\ \end{bmatrix} \times \begin{bmatrix} {\omega_{y}r_{z} - \omega_{z}r_{y}} \\ {\omega_{z}r_{x} - \omega_{x}r_{z}} \\ {\omega_{x}r_{y} - \omega_{y}r_{x}} \\ \end{bmatrix} = m\begin{bmatrix} {r_{y}(\omega_{x}r_{y} - \omega_{y}r_{x}) - r_{z}(\omega_{z}r_{x} - \omega_{x}r_{z})} \\ {r_{z}(\omega_{y}r_{z} - \omega_{z}r_{y}) - r_{x}(\omega_{x}r_{y} - \omega_{y}r_{x})} \\ {r_{x}(\omega_{z}r_{x} - \omega_{x}r_{z}) - r_{y}(\omega_{y}r_{z} - \omega_{z}r_{y})} \\ \end{bmatrix}} \\ & {= m\begin{bmatrix} {r_{y}\omega_{x}r_{y} - r_{y}\omega_{y}r_{x} - r_{z}\omega_{z}r_{x} + r_{z}\omega_{x}r_{z}} \\ {r_{z}\omega_{y}r_{z} - r_{z}\omega_{z}r_{y} - r_{x}\omega_{x}r_{y} + r_{x}\omega_{y}r_{x}} \\ {r_{x}\omega_{z}r_{x} - r_{x}\omega_{x}r_{z} - r_{y}\omega_{y}r_{z} + r_{y}\omega_{z}r_{y}} \\ \end{bmatrix}} \\ & {= m\begin{bmatrix} {(r_{y}^{2} + r_{z}^{2})\omega_{x} - r_{y}r_{x}\omega_{y} - r_{z}r_{x}\omega_{z}} \\ {- r_{x}r_{y}\omega_{x} + (r_{z}^{2} + r_{x}^{2})\omega_{y} - r_{z}r_{y}\omega_{z}} \\ {- r_{x}r_{z}\omega_{x} - r_{y}r_{z}\omega_{y} + (r_{x}^{2} + r_{y}^{2})\omega_{z}} \\ \end{bmatrix}} \\ & {= \left( m\begin{bmatrix} {r_{y}^{2} + r_{z}^{2}} & {- r_{y}r_{x}} & {- r_{z}r_{x}} \\ {- r_{x}r_{y}} & {r_{z}^{2} + r_{x}^{2}} & {- r_{z}r_{y}} \\ {- r_{x}r_{z}} & {- r_{y}r_{z}} & {r_{x}^{2} + r_{y}^{2}} \\ \end{bmatrix} \right)\begin{bmatrix} \omega_{x} \\ \omega_{y} \\ \omega_{z} \\ \end{bmatrix}.} \\ \end{matrix}

L’élément clé est dans la dernière ligne, qui ressemble beaucoup à L=JωL = J\omega. En fait, la quantité entre parenthèses est le moment d’inertie tridimensionnel.

Tenseur d’inertie

Le tenseur d’inertie d’une masse mm avec vecteur radial 𝐫\mathbf{r} est

𝐉=m[ry2+rz2ryrxrzrxrxryrz2+rx2rzryrxrzryrzrx2+ry2].\begin{matrix} {\mathbf{J} = m\begin{bmatrix} {r_{y}^{2} + r_{z}^{2}} & {- r_{y}r_{x}} & {- r_{z}r_{x}} \\ {- r_{x}r_{y}} & {r_{z}^{2} + r_{x}^{2}} & {- r_{z}r_{y}} \\ {- r_{x}r_{z}} & {- r_{y}r_{z}} & {r_{x}^{2} + r_{y}^{2}} \\ \end{bmatrix}.} \\ \end{matrix}

Notez que cette grandeur est une matrice, et non un vecteur. En reconnaissance de cela, en trois dimensions nous désignons parfois le moment d’inertie comme le tenseur d’inertie. Cet artefact mathématique résulte du fait physique que la résistance d’un objet à l’accélération rotationnelle est anisotrope : il peut être plus facile de faire tourner un objet autour d’un axe que d’un autre. Par exemple, comparez le couple nécessaire pour faire tourner une barre d’armature comme un hélicoptère versus la faire rouler autour de son axe longitudinal.

Notez que 𝐉\mathbf{J} est une matrice symétrique. Une conséquence triviale (mais heureuse) de cela est que nous pouvons être négligents avec les vecteurs lignes et colonnes, alors qu’ordinairement nous devons être très prudents pour éviter les résultats transposés.19 Avant d’examiner d’autres propriétés de 𝐉\mathbf{J}, terminons l’extension des formules de base en trois dimensions avec peut-être la plus importante.

Dans le plan, l’équivalent rotationnel de la deuxième loi de Newton, F=maF = ma, est τ=Jα\tau = J\alpha. L’extension aux trois dimensions est directe.

Analogue rotationnel 3D de la deuxième loi de Newton

ττ=αα𝐉.{\tau\tau} = {\alpha\alpha}\mathbf{J}.

Comme nous l’avons dit, dans les simulations informatiques il est souvent le cas que la force et la masse sont connues, et nous calculons l’accélération en utilisant a=F/ma = F/m. Une situation similaire existe pour la dynamique rotationnelle, où la division par mm est remplacée par la multiplication par 𝐉1\mathbf{J}^{- 1} :

αα=ττ𝐉1.{\alpha\alpha} = {\tau\tau}\mathbf{J}^{- 1}.

Il s’avère que le tenseur d’inertie inverse est nécessaire plus fréquemment dans les simulations numériques que 𝐉\mathbf{J} lui-même, et il est généralement précalculé et stocké.

L’Équation (12.30) nous indique comment calculer le tenseur d’inertie pour une masse ponctuelle, mais qu’en est-il des formes plus complexes ? De manière similaire à la façon dont nous avons calculé le centre de masse, nous pouvons imaginer décomposer un objet composé en un grand nombre d’éléments de masse et prendre la somme de leurs moments d’inertie individuels. En prenant la limite lorsque le volume du plus grand élément tend vers zéro, cette somme devient une intégrale multidimensionnelle. De telles intégrales sont généralement difficiles ou impossibles à résoudre analytiquement, sauf pour des primitives abstraites telles que les boîtes, disques, cylindres, sphères, cônes, et autres. Heureusement, de telles primitives apparaissent fréquemment en pratique et peuvent constituer des approximations adéquates. Plus heureusement encore pour nous, le travail difficile de résolution de l’intégrale a déjà été accompli pour une grande variété de primitives. Pour ces primitives, la meilleure méthode pour obtenir le moment d’inertie est de consulter la formule dans un tableau. (Au moment de la rédaction de ce texte, un tel tableau peut être trouvé sur wikipedia.org sous « List of moment of inertia tensors ».)

Les objets plus complexes sont généralement approximés en décomposant l’objet en primitives avec des formules connues, en calculant leurs moments d’inertie individuellement, puis en additionnant les résultats. Il y a juste une complication. Les formules pour ces primitives supposent que l’origine de l’espace de coordonnées est à un emplacement propice, comme au centre de la sphère. Mais imaginez que nous calculons le moment d’inertie d’un corps humain et que nous approximons la tête par une sphère. La probabilité est faible que nous ayons choisi de placer l’origine au centre de la tête. Heureusement le théorème des axes parallèles nous indique comment le moment d’inertie change si nous translatons une masse.

Supposons que 𝐉cm\mathbf{J}_{cm} est le tenseur d’inertie d’un objet de masse mm, mesuré par rapport à son centre de masse. Le tenseur d’inertie 𝐉\mathbf{J}^{\prime} de la masse mesuré par rapport à un certain pivot arbitraire ayant un déplacement [x,y,z]\lbrack x,y,z\rbrack par rapport à ce centre de masse est donné par l’Équation (12.31).

Théorème des axes parallèles

𝐉=𝐉cm+m[y2+z2xyxzxyx2+z2yzxzyzx2+y2].\begin{matrix} {\mathbf{J}^{\prime} = \mathbf{J}_{cm} + m\begin{bmatrix} {y^{2} + z^{2}} & {- xy} & {- xz} \\ {- xy} & {x^{2} + z^{2}} & {- yz} \\ {- xz} & {- yz} & {x^{2} + y^{2}} \\ \end{bmatrix}.} \\ \end{matrix}

12.5.4Réponse aux collisions avec rotations

Complétons maintenant le calcul de réponse aux collisions que nous avons commencé dans la Section 12.4.2. À ce moment, nous n’avions pas pris en compte les effets rotationnels, mais maintenant nous savons mieux. Nous continuons, en suivant Hecker [8].

Rappelez-vous la stratégie de base :

  1. Calculer les vitesses relatives au point de contact.

  2. Projeter les vitesses relatives sur la normale à la surface. C’est la vitesse qui doit être neutralisée pour prévenir (une pénétration supplémentaire).

  3. Calculer kk, la magnitude d’une impulsion, telle que lorsque nous appliquons l’impulsion aux deux objets (dans des directions opposées) parallèlement à la normale à la surface, les vitesses post-collision, mesurées le long de la normale à la surface, ont la magnitude désirée selon une certaine loi de collision. Cette discussion sera basée sur la loi de collision de Newton et le coefficient de restitution ee.

  4. Appliquer l’impulsion k𝐧k\mathbf{n} à un objet et k𝐧- k\mathbf{n} à l’autre.

Traiter des objets qui peuvent tourner ajoute quelques complications. Premièrement, nous avons précédemment fait référence à « la » vitesse d’un objet. Mais lorsqu’un objet tourne, les différents points de l’objet ont des vitesses linéaires différentes. La vitesse dont nous avons besoin n’est pas la vitesse du centre de masse de l’objet, mais plutôt la vitesse au point de contact. Nous devons donc étendre notre calcul de vitesse pour tenir compte de la vitesse angulaire. De même, notre prédiction des vitesses post-impulsion aux points d’impact doit également prendre en considération les effets rotationnels. L’application d’une impulsion au point de contact créera une impulsion angulaire, qui modifiera le taux de rotation. En général, lorsque les objets sont libres de tourner, une impulsion plus petite suffira à résoudre la collision, car l’impulsion a deux façons de réduire les vitesses aux points. Le changement de vitesse angulaire fera que les points de contact s’éloigneront l’un de l’autre plus rapidement que leurs centres de masse. En fait, les centres de masse peuvent encore se rapprocher l’un de l’autre après la collision.

Dans la Section 12.4.2, nous avons commencé avec l’équation

𝐯rel𝐧=e𝐯rel𝐧\mathbf{v}_{rel}^{\prime} \cdot \mathbf{n} = - e\,\mathbf{v}_{rel} \cdot \mathbf{n}

puis développé les calculs et résolu pour kk, la magnitude de l’impulsion. (Elle est cachée dans le membre de gauche.) La même stratégie fonctionne ici, seulement nous devons dériver de nouvelles expressions pour les vitesses aux points avant et après l’impulsion qui tiennent compte des effets rotationnels. Vérifions d’abord la notation. Nous utilisons 𝐫i\mathbf{r}_{i} pour désigner la position du point d’impact sur l’objet ii par rapport à son centre de masse, ωωi{\omega\omega}_{i} pour la vitesse angulaire de l’objet, mim_{i} pour la masse, et 𝐉i\mathbf{J}_{i} pour le tenseur d’inertie. Pour la vitesse linéaire, nous devons introduire une nouvelle notation pour distinguer les vitesses linéaires au point de contact, que nous notons 𝐮i\mathbf{u}_{i}, et les vitesses linéaires des centres de masse, notées 𝐯i\mathbf{v}_{i}. Comme précédemment, les apostrophes sur les grandeurs se réfèrent à leurs valeurs après la collision.

Avec cette notation, nous calculons la vitesse au point de chaque objet en ajoutant la vitesse due au mouvement du centre de masse, plus celle causée par la rotation, selon l’Équation (11.31) :

Calcul des vitesses aux points

𝐮1=𝐯1+ωω1×𝐫1,𝐮2=𝐯2+ωω2×𝐫2.\begin{matrix} \mathbf{u}_{1} & {= \mathbf{v}_{1} + {\omega\omega}_{1} \times \mathbf{r}_{1},} & \mathbf{u}_{2} & {= \mathbf{v}_{2} + {\omega\omega}_{2} \times \mathbf{r}_{2}.} \\ \end{matrix}

Les vitesses après la collision dépendent de la variation de vitesse linéaire du centre de masse, et aussi de la variation de vitesse angulaire. Celles-ci sont calculées par

Vitesses linéaires et angulaires post-impulsion des corps

𝐯1=𝐯1k𝐧/m1,𝐯2=𝐯2+k𝐧/m2,ωω1=ωω1(𝐫1×k𝐧)𝐉11,ωω2=ωω2+(𝐫2×k𝐧)𝐉21,\begin{matrix} \mathbf{v}_{1}^{\prime} & {= \mathbf{v}_{1} - k\mathbf{n}/m_{1},} & \mathbf{v}_{2}^{\prime} & {= \mathbf{v}_{2} + k\mathbf{n}/m_{2},} \\ {\omega\omega}_{1}^{\prime} & {= {\omega\omega}_{1} - (\mathbf{r}_{1} \times k\mathbf{n})\mathbf{J}_{1}^{- 1},} & {\omega\omega}_{2}^{\prime} & {= {\omega\omega}_{2} + (\mathbf{r}_{2} \times k\mathbf{n})\mathbf{J}_{2}^{- 1},} \\ \end{matrix}

où les conventions de signe sont déterminées par notre choix arbitraire d’avoir la normale de collision 𝐧\mathbf{n} pointant du premier objet vers le second. En combinant les équations ci-dessus, nous obtenons les vitesses post-impulsion aux points :

𝐮1=𝐯1+ωω1×𝐫1=𝐯1k𝐧/m1+(ωω1(𝐫1×k𝐧)𝐉11)×𝐫1=𝐯1k𝐧/m1+ωω1×𝐫1k((𝐫1×𝐧)𝐉11)×𝐫1=(𝐯1+ωω1×𝐫1)k𝐧/m1k((𝐫1×𝐧)𝐉11)×𝐫1=𝐮1k𝐧/m1k((𝐫1×𝐧)𝐉11)×𝐫1,𝐮2=𝐮2+k𝐧/m2+k((𝐫2×𝐧)𝐉21)×𝐫2.\begin{matrix} \mathbf{u}_{1}^{\prime} & {= \mathbf{v}_{1}^{\prime} + {\omega\omega}_{1}^{\prime} \times \mathbf{r}_{1}} \\ & {= \mathbf{v}_{1} - k\mathbf{n}/m_{1} + ({\omega\omega}_{1} - (\mathbf{r}_{1} \times k\mathbf{n})\mathbf{J}_{1}^{- 1}) \times \mathbf{r}_{1}} \\ & {= \mathbf{v}_{1} - k\mathbf{n}/m_{1} + {\omega\omega}_{1} \times \mathbf{r}_{1} - k((\mathbf{r}_{1} \times \mathbf{n})\mathbf{J}_{1}^{- 1}) \times \mathbf{r}_{1}} \\ & {= (\mathbf{v}_{1} + {\omega\omega}_{1} \times \mathbf{r}_{1}) - k\mathbf{n}/m_{1} - k((\mathbf{r}_{1} \times \mathbf{n})\mathbf{J}_{1}^{- 1}) \times \mathbf{r}_{1}} \\ & {= \mathbf{u}_{1} - k\mathbf{n}/m_{1} - k((\mathbf{r}_{1} \times \mathbf{n})\mathbf{J}_{1}^{- 1}) \times \mathbf{r}_{1},} \\ \mathbf{u}_{2}^{\prime} & {= \mathbf{u}_{2} + k\mathbf{n}/m_{2} + k((\mathbf{r}_{2} \times \mathbf{n})\mathbf{J}_{2}^{- 1}) \times \mathbf{r}_{2}.} \\ \end{matrix}

Vitesses post-impulsion au point de contact

En définissant 𝐮rel=𝐮1𝐮2\mathbf{u}_{rel} = \mathbf{u}_{1} - \mathbf{u}_{2} comme la vitesse relative au point, nous sommes maintenant prêts à effectuer l’algèbre :

e𝐮rel𝐧=𝐮rel𝐧,e𝐮rel𝐧=(𝐮1𝐮2)𝐧,e𝐮rel𝐧=[(𝐮1k𝐧/m1k((𝐫1×𝐧)𝐉11)×𝐫1)(𝐮2+k𝐧/m2+k((𝐫2×𝐧)𝐉21)×𝐫2)]𝐧,e𝐮rel𝐧=[(𝐮1𝐮2)k𝐧/m1k𝐧/m2k((𝐫1×𝐧)𝐉11)×𝐫1)k((𝐫2×𝐧)𝐉21)×𝐫2)]𝐧,e𝐮rel𝐧=𝐮rel𝐧k[(1/m1+1/m2)𝐧+((𝐫1×𝐧)𝐉11)×𝐫1)+((𝐫2×𝐧)𝐉21)×𝐫2)]𝐧,(e+1)𝐮rel𝐧=k[(1/m1+1/m2)𝐧+((𝐫1×𝐧)𝐉11)×𝐫1)+((𝐫2×𝐧)𝐉21)×𝐫2)]𝐧.\begin{matrix} {- e\,\mathbf{u}_{rel} \cdot \mathbf{n}} & {= \mathbf{u}_{rel}^{\prime} \cdot \mathbf{n},} \\ {- e\,\mathbf{u}_{rel} \cdot \mathbf{n}} & {= (\mathbf{u}_{1}^{\prime} - \mathbf{u}_{2}^{\prime}) \cdot \mathbf{n},} \\ \begin{matrix} {- e\,\mathbf{u}_{rel} \cdot \mathbf{n}} & {= \lbrack\ (\mathbf{u}_{1} - k\mathbf{n}/m_{1} - k((\mathbf{r}_{1} \times \mathbf{n})\mathbf{J}_{1}^{- 1}) \times \mathbf{r}_{1})} \\ & {\quad\quad - (\mathbf{u}_{2} + k\mathbf{n}/m_{2} + k((\mathbf{r}_{2} \times \mathbf{n})\mathbf{J}_{2}^{- 1}) \times \mathbf{r}_{2})\ \rbrack \cdot \mathbf{n},} \\ \end{matrix} & \\ \begin{matrix} {- e\,\mathbf{u}_{rel} \cdot \mathbf{n}} & {= \lbrack\ (\mathbf{u}_{1} - \mathbf{u}_{2}) - k\mathbf{n}/m_{1} - k\mathbf{n}/m_{2}} \\ & {\quad\quad - k((\mathbf{r}_{1} \times \mathbf{n})\mathbf{J}_{1}^{- 1}) \times \mathbf{r}_{1}) - k((\mathbf{r}_{2} \times \mathbf{n})\mathbf{J}_{2}^{- 1}) \times \mathbf{r}_{2})\ \rbrack \cdot \mathbf{n},} \\ \end{matrix} & \\ \begin{matrix} {- e\,\mathbf{u}_{rel} \cdot \mathbf{n}} & {= \mathbf{u}_{rel} \cdot \mathbf{n} - k\lbrack\ (1/m_{1} + 1/m_{2})\mathbf{n} + ((\mathbf{r}_{1} \times \mathbf{n})\mathbf{J}_{1}^{- 1}) \times \mathbf{r}_{1})} \\ & {\quad\quad + ((\mathbf{r}_{2} \times \mathbf{n})\mathbf{J}_{2}^{- 1}) \times \mathbf{r}_{2})\ \rbrack \cdot \mathbf{n},} \\ \end{matrix} & \\ {- (e + 1)\,\mathbf{u}_{rel} \cdot \mathbf{n}} & {= - k\lbrack\ (1/m_{1} + 1/m_{2})\mathbf{n} + ((\mathbf{r}_{1} \times \mathbf{n})\mathbf{J}_{1}^{- 1}) \times \mathbf{r}_{1})} \\ & {\quad\quad + ((\mathbf{r}_{2} \times \mathbf{n})\mathbf{J}_{2}^{- 1}) \times \mathbf{r}_{2})\ \rbrack \cdot \mathbf{n}.} \\ \end{matrix}

Avec une étape de plus, nous avons la formule que nous cherchons.

Réponse aux collisions avec rotation

La magnitude de l’impulsion de collision peut être calculée à partir de la vitesse relative au point, des masses, des moments d’inertie, de la normale à la surface, et du coefficient de restitution, par

k=(e+1)𝐮rel𝐧[(1/m1+1/m2)𝐧+((𝐫1×𝐧)𝐉11)×𝐫1)+((𝐫2×𝐧)𝐉21)×𝐫2)]𝐧.\begin{matrix} {k = \frac{(e + 1)\,\mathbf{u}_{rel} \cdot \mathbf{n}}{\lbrack(1/m_{1} + 1/m_{2})\mathbf{n} + ((\mathbf{r}_{1} \times \mathbf{n})\mathbf{J}_{1}^{- 1}) \times \mathbf{r}_{1}) + ((\mathbf{r}_{2} \times \mathbf{n})\mathbf{J}_{2}^{- 1}) \times \mathbf{r}_{2})\rbrack \cdot \mathbf{n}}.} \\ \end{matrix}

L’Équation (12.32) suppose que tous les vecteurs sont mesurés dans le même espace de coordonnées et que les tenseurs d’inertie inverses opèrent sur des vecteurs dans ce même espace. Cependant, le tenseur d’inertie inverse n’est une constante qu’en espace local, et la même matrice en espace mondial peut ne pas être mise à jour continuellement à mesure que l’objet tourne. Notre convention est de décrire l’orientation de l’objet en utilisant 𝐑\mathbf{R}, une matrice de rotation qui transforme les vecteurs lignes à gauche depuis l’espace local vers l’espace vertical. Sous ces hypothèses, dans l’Équation (12.32) nous remplacerions 𝐉1\mathbf{J}^{- 1} par 𝐑T𝐉1𝐑\mathbf{R}^{T}\mathbf{J}^{- 1}\mathbf{R}.

12.6Simulateurs de corps rigides en temps réel

Cette section présente une vue d’ensemble des simulateurs de corps rigides en temps réel tels que PhysX, Havok, Bullet Physics, et l’Open Dynamics Engine. Peu de programmeurs de jeux travailleront directement sur le moteur physique, et certainement bien moins encore en écriront un depuis zéro. La plupart d’entre nous ont juste besoin de savoir comment utiliser la chose. Heureusement, à cet égard les moteurs physiques précédemment listés ont beaucoup en commun. Cependant, un moteur physique est comme beaucoup d’autres outils de programmation : même si vous n’avez pas l’intention d’en écrire un, vous pouvez l’utiliser plus efficacement si vous avez une compréhension de base de comment les choses fonctionnent sous le capot.

Nous regrettons de ne pas pouvoir entrer dans les détails, pour quelques raisons. Premièrement, toute tentative de décrire « comment fonctionne un moteur physique » est compliquée par le fait qu’il y a actuellement encore une grande diversité et une innovation rapide dans le domaine. Deuxièmement, les mathématiques deviennent rapidement plus avancées que ce qui est approprié pour ce livre d’introduction. Franchement, vos auteurs n’ont tout simplement pas assez d’expertise pour résumer succinctement l’état de l’art de A à Z. Cependant, du point de vue d’un utilisateur, il y a beaucoup de similitudes entre les moteurs physiques qui peuvent être couvertes de manière introductive, donc nous commençons par une vue d’ensemble d’une interface typique d’un moteur physique. Il y a aussi quelques mathématiques choisies qui sont discutées vers la fin de ce chapitre.

12.6.1Variables d’état du moteur physique

Un vieil adage informatique attribué à Fred Brooks dit : « Montrez-moi vos organigrammes et cachez vos tables, et je resterai dans le mystère. Montrez-moi vos tables, et je n’aurai généralement pas besoin de vos organigrammes ; ils seront évidents. » Malgré l’image d’une banderole imprimée sur du papier en accordéon à l’aide de The Print Shop qu’évoque la terminologie archaïque, l’essence du message est encore vraie aujourd’hui : pour écrire ou comprendre un logiciel, un bon point de départ est la description des données sur lesquelles on opère. Du point de vue de l’utilisateur d’un moteur physique, il y a trois types principaux d’objets de données dans un simulateur de corps rigides : les corps dynamiques, les données de géométrie de collision, et les contraintes. Examinons chacun d’eux à leur tour.

État du corps dynamique. L’un des types d’objets de données les plus fondamentaux dans un simulateur de corps rigides en temps réel est le corps dynamique. Vous pouvez considérer le corps dynamique comme l’« âme » d’un corps rigide : il lui dit où aller, mais il n’a pas d’apparence extérieure, donc vous ne pouvez le voir que indirectement via les effets qu’il a. La géométrie de collision (qui sera discutée plus tard) est ce qui donne à un corps rigide sa « forme terrestre », c’est-à-dire sa forme. La partie d’un corps rigide que nous voyons est généralement une sorte de modèle graphique, qui n’a rien à voir avec le moteur physique et n’est pas discuté ici.

À ce stade, il est probablement important de discuter de la relation entre un corps dynamique et un « objet » au sens non technique (et non informatique) du terme. Un objet rigide simple, tel que les omniprésentes caisses de jeux vidéo qu’Old Man Murray aimait tant signaler, peut être simulé en utilisant un seul corps dynamique. Un objet plus complexe avec des pièces mobiles, comme une voiture ou un corps humain, n’est pas un corps rigide et ne peut donc pas être simulé avec un seul corps dynamique. Au contraire, l’objet doit être décomposé en parties rigides, puis les corps dynamiques correspondant à ces parties connectés via des contraintes d’articulation, qui seront discutées plus tard. Bien sûr, la représentation graphique d’un tel objet composé n’a pas besoin d’être « rigide », mais dans la simulation physique, chaque corps dynamique est un corps rigide.

Une autre façon dont un corps dynamique est comme une âme est qu’il est plus facile de simplement lister ses propriétés plutôt que de tenter une définition précise. Alors énumérons les variables qui constituent un corps dynamique. Nous classons ces variables selon leur cycle de vie, c’est-à-dire quand ces variables sont initialisées et à quelle fréquence leurs valeurs changent. Certaines propriétés sont (en grande partie) constantes, d’autres changent continuellement au cours de la vie de l’objet, et d’autres encore sont des variables de travail, prenant existence (ou réinitialisées) au début d’un pas de temps de simulation et jetées à la fin du pas de temps.

La première classe de propriétés est celle qui est initialisée lorsque le corps est instancié par l’application, et qui reste typiquement (mais pas nécessairement) constante pendant la simulation.

La deuxième classe de variables qui définissent l’état du corps dynamique sont celles qui évoluent dans le temps, et contiennent une certaine « histoire » et doivent être transmises d’une image à la suivante. Si nous devons sauvegarder l’état complet de la simulation et la reprendre plus tard (par exemple, dans une sauvegarde de jeu), ces variables ne peuvent pas être dérivées de toute autre source et doivent être sérialisées :

Cette liste reflète un choix de faire des vitesses les variables d’état primaires, auquel cas les quantités de mouvement sont des grandeurs facilement dérivées. Une stratégie alternative est d’utiliser la quantité de mouvement comme variable d’état primaire et la vitesse comme grandeur dérivée. La première approche présente un avantage pour traiter les objets contrôlés cinématiquement, dont l’inertie (et donc la quantité de mouvement) est considérée comme infinie. La seconde peut traiter plus élégamment la situation dans laquelle la masse change au fil du temps, car la conservation de la quantité de mouvement est automatiquement respectée.

Enfin, chaque corps dynamique possède certaines propriétés qui sont stockées dans des variables de travail. Ces grandeurs changent au fil du temps mais n’ont pas intrinsèquement d’« histoire » intégrée. Ces types de variables sont souvent réinitialisés à un certain moment dans l’étape de simulation. Si nous voulions sauvegarder l’état de la simulation et la reprendre plus tard, il n’est généralement pas nécessaire20 d’inclure ces variables dans la description d’état :

Nous utilisons le mot « accumulateurs » ici pour refléter ce qui se passe souvent en pratique. Ces valeurs sont souvent réinitialisées à zéro à un certain moment dans l’image, puis différentes sources de forces externes sont interrogées, et le résultat net stocké dans ces variables.

Le Listing 12.2 est une structure qui résume les éléments essentiels de l’état d’un corps dynamique et donne une indication de comment il pourrait être implémenté en C++. Ces noms de variables sont utilisés dans le pseudocode plus loin dans ce chapitre. Vous devriez comparer cela à la classe correspondante dans une implémentation réelle d’un moteur physique pour voir quelles données supplémentaires ce moteur a choisi de garder à portée, ou quels choix différents ont été faits.

struct DynamicsBody {

    //
    // Grandeurs primaires
    //

    // Position du centre de masse
    Vector3 pos;

    // Orientation au format quaternion
    Quaternion rotQuat;

    // Masse
    float mass;

    // Moment d'inertie, exprimé en espace local.
    Matrix3x3 jBody;

    // Vitesses
    Vector3 linVel;
    Vector3 angVel;

    //
    // Grandeurs dérivées
    //

    // Orientation, sous forme matricielle
    Matrix3x3 rotMat;

    // Masse inverse et tenseur d'inertie inverse
    float oneOverMass;
    Matrix3x3 invJBody;
    //
    // Variables temporaires / de travail
    //

    // Accumulateurs de force.  Remis à zéro à chaque pas de temps
    Vector3 force;
    Vector3 torque;
    Vector3 linImpulse;
    Vector3 angImpulse;

    //
    // Listes de collision et de contraintes
    //
    vector userConstraints;
    vector collisionShapes;
};

Géométrie de collision. Si le corps dynamique est l’âme d’un objet rigide, la géométrie de collision est sa manifestation terrestre. La géométrie de collision est utilisée pour définir la forme des corps dynamiques, et également des autres objets « sans âme » ou statiques. Typiquement, un moteur physique supportera un certain nombre de primitives différentes. Par ordre de complexité, ce sont :

Les formes plus simples ont des avantages à la fois en termes de vitesse et de stabilité, c’est pourquoi il est souvent préférable de construire une forme concave ou complexe à partir de plusieurs primitives. Ces primitives sont autorisées à se pénétrer mutuellement ; seule leur union compte, car deux objets géométriques attachés au même corps dynamique ne se colleront pas entre eux. En effet, il est important que le moteur physique offre une flexibilité pour décider quelles paires d’objets géométriques entrent en collision ; par exemple, sur un personnage, la partie cuisse peut ne pas entrer en collision avec les parties torso et tibia connectées, mais pourrait entrer en collision contre toutes les autres parties du corps. Ou, sous l’égide de la première loi de la physique des jeux vidéo, nous pourrions créer une barrière que les ennemis peuvent traverser mais que le personnage joueur ne peut pas.

Un objet de géométrie de collision sera soit associé à un seul corps dynamique, par rapport auquel il a une position et une orientation relatives fixes, soit ne sera associé à aucun corps dynamique et fait partie du « monde » statique.

Contraintes. Le troisième et dernier type d’objet principal dans un simulateur de corps rigides est une contrainte. Les contraintes sont utilisées pour imposer des relations entre des paires de corps rigides, ou entre un corps rigide et le monde. Les applications peuvent créer deux types de contraintes utilisateur : les articulations et les moteurs. Un troisième type de contrainte est la contrainte de contact, qui intervient dans la réponse aux collisions.

Les contraintes utilisateur sont le type « ordinaire » de contraintes qui sont spécifiées par l’application afin de maintenir une relation souhaitée. Le type de contrainte le plus courant et le plus facilement compris maintient une relation spatiale entre deux parties et est connu sous le nom d’articulation. Voici quelques exemples des types d’articulations qui sont intégrés dans la plupart des moteurs physiques.

Par exemple, dans un squelette humain, chaque « os » peut être simulé comme un corps rigide séparé, avec des contraintes utilisées pour attacher chaque os à son parent. Des articulations à charnière pourraient être utilisées aux genoux, avec des limites définies pour empêcher le genou de se plier en arrière. Des articulations coniques ou peut-être universelles pourraient être utilisées pour les hanches et les épaules.

Alors qu’une contrainte d’articulation est concernée par la position et l’orientation des corps, un moteur est un type de contrainte qui tente d’imposer une vitesse relative demandée entre deux corps. Par exemple, en utilisant le type approprié de moteur, une application peut instruire le moteur physique : « Le corps A doit maintenir une vitesse angulaire ω\omega, par rapport à l’axe 𝐧̂\hat{\mathbf{n}}, qui est fixe dans le référentiel du corps B. »

La plupart des moteurs physiques disposent d’une variété de contraintes, et même de mécanismes pour ajouter vos propres types de contraintes. De plus, les contraintes n’ont pas besoin d’être absolues, mais le moteur physique peut recevoir des instructions pour limiter la force qui peut être appliquée pour imposer la contrainte. La plupart des moteurs physiques fournissent un mécanisme par lequel une contrainte peut être interrogée pour connaître la quantité de force qui a été appliquée dans la tentative de satisfaire la contrainte. Cette requête peut être très utile, par exemple, pour jouer un son si un moteur est sous tension, ou peut-être détruire une articulation si un certain seuil est dépassé. Les articulations et leurs limites peuvent également être « souples ». Par exemple, dans l’Open Dynamics Engine, des valeurs connues sous le nom de paramètre de réduction d’erreur (ERP) et de paramètre de mélange de force de contrainte (CFM) peuvent être réglées pour faire se comporter l’articulation comme un système ressort-amortisseur.

Bien que les contraintes d’application n’aient pas nécessairement de « mémoire » et puissent être créées et détruites à volonté par l’application—par exemple pour détacher une roue d’une voiture ou un bras d’un corps—elles persistent généralement à travers les pas de temps. Les contraintes de contact, en revanche, sont instanciées par le moteur physique et sont toujours détruites dans le même pas de temps physique. (Conceptuellement, du moins. Elles peuvent survivre en interne pour des raisons de performance ou de stabilité.) Elles sont utilisées pour imposer la non-pénétration entre la géométrie de collision de deux corps (ou d’un corps et une géométrie statique). Ces contraintes sont la sortie principale du système de détection de collision et le mécanisme par lequel la réponse aux collisions est effectuée.

Bien que les contraintes de contact soient créées par le moteur physique lors de la détection de collision, cela ne signifie pas que l’application ne peut pas être impliquée dans le processus. Les moteurs physiques fournissent de nombreux points d’accroche pour personnaliser la création de ces points de contact et notifier l’application lorsque des contraintes de contact sont appliquées à un corps dynamique. Ces points d’accroche sont un moyen puissant de personnalisation fine de comment des paires particulières d’objets interagissent, et les notifications de collision sont essentielles pour implémenter des retours tels que les effets sonores et de particules ou une réduction des points de vie.

Cette section a présenté les trois « tables » principales de données dans un moteur physique. La prochaine section couvre les « organigrammes »—et nous espérons que vous et Fred Brooks ne les trouverez pas trop « évidents ».

12.6.2Vue d’ensemble de haut niveau

Les API présentées par les moteurs physiques modernes, à travers lesquelles vous pouvez manipuler les « tables » de la section précédente, montrent une similitude significative. Cependant, leur fonctionnement interne est plus diversifié. C’est là que nous devons vraiment commencer à utiliser des généralités. Cette section commence par présenter du pseudocode de haut niveau de comment un moteur physique s’intègre dans la boucle de jeu. Ensuite, nous discutons brièvement de quelques stratégies générales pour ce qui se passe à l’intérieur du cœur du moteur physique.

Nous commençons par la boucle de jeu elle-même, qui est résumée par le Listing 12.3.

void gameLoop() {
    getReady();
    while (!gameOver) {
        simPrePhysics();
        physicsEngine->update();
        simPostPhysics();
        render();
    }
}

Décrivons le travail lié à la physique qui se passe dans chacune des « fonctions » de ce listing. D’abord, dans getReady(), en plus du chargement habituel des textures et des modèles, nous créons également des objets dans le système physique des trois types principaux discutés dans la Section 12.6.1. Le monde aura probablement une grande quantité de géométrie de collision. Chaque objet simulé simple peut avoir un corps dynamique et une ou quelques formes de collision. Un modèle articulé complexe peut nécessiter plusieurs corps dynamiques, liés ensemble par des contraintes d’articulation, et une géométrie de collision pour chaque corps. Pour le personnage joueur, nous pourrions configurer une contrainte soigneusement réglée utilisée pour tirer le personnage vers une position désirée à chaque image.

À l’intérieur de la boucle de jeu, nous avons divisé la simulation en trois étapes. Premièrement, il y a un ensemble d’activités que nous faisons avant d’appeler le moteur physique, que nous avons regroupées sous simPrePhysics(). Ici nous préparons les entrées au traitement physique. Nous pourrions traiter les objets contrôlés cinématiquement et notifier le système physique de leurs nouvelles positions et vitesses. Nous lirions les entrées du joueur ; déterminerions où ces contrôles indiquent que le joueur devrait être ; et mettrions à jour les contraintes, forces ou couples utilisés par le moteur physique pour tenter de déplacer le personnage joueur en position. Dans un jeu en réseau, nous pourrions interroger le réseau pour les objets dont l’hôte local n’est pas l’autorité, et mettre à jour une contrainte qui indique au moteur physique : « Essayez de faire aller l’objet ici. » De plus, les objets physiques n’ont pas tous besoin d’être créés une fois dans getReady() et de vivre éternellement. Nous pouvons certainement ajouter et supprimer des objets de l’univers physique à tout moment.

Ensuite, nous invoquons le moteur physique pour faire son travail. Bien que la majeure partie de ce code soit dans le moteur physique lui-même, il communiquera avec le code de jeu à plusieurs fins, soit juste pour notification, soit peut-être pour fournir des opportunités de personnalisation à l’application. Nous passons en revue quelques approches différentes utilisées par les moteurs physiques plus loin dans cette section.

Lorsque le moteur physique est terminé, certaines étapes diverses doivent se produire que nous avons regroupées sous la fonction simPostPhysics(). L’étape la plus importante est peut-être de mettre à jour nos objets de jeu avec les nouvelles positions et orientations qui ont été déterminées par le moteur physique. Nous pourrions le faire en parcourant tous les objets et en interrogeant le moteur physique pour la position mise à jour. Ou nous pourrions recevoir une notification sous forme de rappel. Les positions des objets mises à jour ne sont pas la seule sortie de la mise à jour physique. Nous pourrions également être intéressés par les forces qui étaient nécessaires pour maintenir les contraintes, ou la liste des collisions qui se sont produites. Selon la conception du jeu, et comment la caméra est simulée, nous mettons souvent à jour la caméra après que la physique est terminée, de sorte qu’elle se déplace en réponse au mouvement du joueur.

Enfin, bien sûr, à un moment nous devons dessiner la scène, comme indiqué par la présence de la fonction render().

Dans notre pseudocode, physicsEngine->update() représente le cœur du moteur physique. Comme nous l’avons mentionné, aucun deux moteurs physiques ne fonctionnent exactement de la même façon, mais il y a des thèmes communs. Ici nous décrivons brièvement quelques stratégies, en résumant l’enquête plus approfondie d’Erleben et al. [5].

Méthodes de pénalité. Les méthodes de pénalité résolvent les collisions avec un mécanisme de type ressort. La détection de collision fournit une liste de formes de collision pénétrantes. Pour chaque paire, nous localisons les corps dynamiques qui possèdent ces formes et appliquons une force répulsive à chacun, où la magnitude de cette force est proportionnelle à la profondeur de pénétration. En d’autres termes, la méthode de pénalité ne tente pas de résoudre les collisions au même pas de temps qu’elles sont détectées ; plutôt, au fil du temps la force causera la séparation des objets. Bien sûr, nous devons régler nos « ressorts » soigneusement ; pour les objets empilés, la force du ressort s’équilibrera avec la gravité lorsque les objets sont en équilibre, donc en général la méthode de pénalité ne tente pas d’éliminer complètement la pénétration, mais plutôt juste de la limiter à un niveau acceptable. Le Listing 12.4 montre une version simplifiée de comment cela pourrait être fait.

void PhysicsEngine::update() {

    // Rassembler les forces externes agissant sur les corps dynamiques
    // (c'est-à-dire gravité, ressorts, etc)
    computeForces();

    // Localiser la géométrie de collision pénétrante, et leurs corps propriétaires
    struct Collision {
        DynamicsBody *body1, *body2; // les corps impliqués
        Vector3 p; // emplacement de la collision
        Vector3 n; // normale de contact
        float penetrationDepth;
    };
    vector collisions = collisionDetection();

    // Traiter chaque collision comme un ressort
    for (each collision) {

        // Calculer une force basée sur la profondeur de pénétration
        Vector3 f = calculateForce(collisions[i]);

        // Ajouter cette force aux deux corps
        collisions[i].body1->addForceAtPoint(collisions[i].p, f);
        collisions[i].body2->addForceAtPoint(collisions[i].p, -f);
    }

    // Intégrer les forces (accélérations) en vitesse, et
    // les vitesses en position, pour faire avancer la simulation
    integrateForces();
}

Simulations à impulsions séquentielles. Ces méthodes ont été popularisées par Mirtich [10]. Les contacts au repos et en collision sont modélisés comme des collisions (possiblement à très haute fréquence). Lorsqu’une collision est détectée entre deux objets A et B, une loi de collision (telle que le modèle de collision de Newton simple présenté dans la Section 12.5.4) est utilisée pour calculer une impulsion qui préviendra la pénétration. Cependant, cela pourrait entraîner une collision différente, soit ailleurs entre A et B, soit peut-être entre B et C, donc le processus doit être répété jusqu’à ce que toutes les vitesses relatives aux contacts soient au repos ou se séparant. Le Listing 12.5 illustre l’idée de base.

void PhysicsEngine::update() {

    // Rassembler les forces externes agissant sur les corps dynamiques
    // (c'est-à-dire gravité, ressorts, etc)
    computeForces();

    // Intégrer la force (accélération) en vitesses, mais ne pas encore
    // mettre à jour les positions
    updateVelocities();

    // Localiser les corps en collision
    struct Collision {
        DynamicsBody *body1, *body2; // les corps impliqués
        Vector3 p; // emplacement de la collision
        Vector3 n; // normale de contact
        float penetrationDepth;
    };
    vector collisions = collisionDetection();

    // Continuer à appliquer des impulsions jusqu'à ce que toutes
    // les vitesses de contact relatives soient résolues
    for (;;) {

        // Trouver une collision où les vitesses relatives aux points
        // au point de contact sont telles que les corps se rapprochent
        // le long de la normale. (Contact en collision,
        // plutôt qu'au repos ou se séparant)
        Collision *c = nextUnresolvedCollision(collisions);
        if (c == NULL) break;

        // Calculer une impulsion en utilisant une loi de collision
        Vector3 impulse = calculateCollisionImpulse(c);

        // Appliquer l'impulsion aux deux corps. (Cela produit un
        // changement immédiat des vitesses linéaires et angulaires)
        c->body1->addImpulseAtPoint(c->p, impulse);
        c->body2->addImpulseAtPoint(c->p, -impulse);

        // Continuer la boucle jusqu'à ce que toutes les vitesses de collision soient au repos
        // ou se séparant
    }

    // Maintenant faire avancer les positions en fonction des vitesses
    integrateVelocities();
}

La première difficulté est que l’ordre dans lequel les contacts sont traités (qui est souvent un artefact arbitraire de la détection de collision) peut provoquer des résultats de simulation différents. Une seconde est que la simulation peut se retrouver dans une boucle infinie, il faut donc prendre soin d’assurer la terminaison.

Simulations basées sur la vitesse. Ces techniques représentent actuellement l’état de l’art dans les simulations en temps réel. La prévention de la pénétration et la résolution des collisions sont vues comme une contrainte à satisfaire. Comme mentionné précédemment, ces contraintes sont traitées de manière standardisée avec des contraintes utilisateur telles que les articulations et les moteurs. Pour chaque contrainte, la simulation examine le ratio du taux de variation de satisfaction de la contrainte par rapport aux changements de vitesse linéaire et angulaire. En utilisant ces informations (une matrice de dérivées partielles est connue comme une matrice Jacobienne), le simulateur résout pour les vitesses qui satisfont les contraintes. Ceci est illustré dans le Listing 12.6.

void PhysicsEngine::update() {

    // Rassembler les forces externes agissant sur les corps dynamiques
    // (excluant celles des contraintes)
    computeForces();


    // Appliquer provisoirement les forces, pour calculer les
    // positions et vitesses proposées (sans contraintes)
    integrateForcesTentatively();

    // Constituer la liste des contraintes. Celles-ci proviennent de deux
    // sources : la détection de collision (contraintes de contact) et
    // les contraintes utilisateur.
    vector constraintRows;
    collisionDetection(constraintRows);
    processApplicationConstraints(constraintRows);

    // Résoudre pour les vitesses qui satisfont les contraintes
    solveConstraints(constraintRows);

    // Maintenant vraiment mettre à jour les positions, basées sur les
    // vitesses calculées qui satisfont les contraintes
    integrateVelocities();
}

Le problème matriciel résultant n’est pas un système d’équations linéaires standard ; c’est plutôt un système d’inégalités. Par exemple, si une loi de collision prédit que deux objets devraient rebondir avec une certaine vitesse, cette vitesse est interprétée comme une vitesse minimale. Si une autre contrainte (disons qu’un objet est tiré loin par un ressort) provoque le rebond des objets plus vite que prédit par la loi de collision, cela n’est pas considéré comme une violation de la contrainte de contact. Ce type de système peut être mis dans une forme standard, connue sous le nom de problème de complémentarité linéaire (LCP).

Diverses implémentations de méthodes basées sur la vitesse empruntent des idées des simulations à pénalité et à impulsions séquentielles, il peut donc parfois être difficile de classer une simulation comme strictement l’une ou l’autre. Les solveurs matriciels incrémentiels utilisés pour résoudre le problème de complémentarité linéaire effectuent de petits ajustements à la vitesse des corps ; ces ajustements peuvent être interprétés physiquement comme une série d’impulsions. Il existe donc des similitudes entre un solveur basé sur la vitesse et un solveur à impulsions séquentielles. La distinction est que dans un solveur à impulsions séquentielles, la loi de collision est appliquée plusieurs fois. Dans une simulation basée sur la vitesse, la loi de collision est appliquée une fois afin de déterminer la vitesse relative idéale, et ensuite cette vitesse est traitée comme un objectif ou une contrainte. Certains solveurs basés sur la vitesse, notamment l’Open Dynamics Engine, permettent de traiter les contraintes comme « souples », en utilisant des techniques similaires aux méthodes basées sur la pénalité.

12.6.3Intégration d’Euler

Tout moteur physique doit être capable de « progresser » dans le temps. Nous supposons que nous connaissons les valeurs de position et de vitesse (à la fois linéaires et angulaires) à un certain temps tt, et nous voulons déterminer leurs valeurs à un futur temps t+Δtt + \Delta t. Le résultat dépendra des forces nettes subies par l’objet, et bien sûr, de la vitesse initiale au temps tt. Les forces elles-mêmes peuvent varier selon la position ou la vitesse du corps. Par exemple, un corps connecté à un point fixe par un ressort subit des forces qui varient en fonction de la position du corps, et un corps se déplaçant dans un fluide comme l’air subit une force de traînée qui a une certaine relation (potentiellement non linéaire) avec la vitesse relative du corps et du fluide. De plus, les forces peuvent être le résultat d’interactions entre corps (par exemple, quatre corps connectés par des ressorts formant un tétraèdre, avec un coin immergé dans l’eau). En bref, le problème n’est pas trivial.

Le terme mathématique pour cela est l’intégration numérique. Il y a deux parties principales à notre discussion. Cette section ignore la rotation et discute des concepts de base de l’intégration en termes de d’accélération et de vitesse linéaires. La Section 12.6.4 considère comment intégrer l’accélération et la vitesse angulaires.

Rappelons que l’intégration est le processus de détermination d’une fonction à partir de sa dérivée. Dans notre cas, nous travaillons avec trois fonctions différentes du temps : la position, la vitesse et l’accélération. Un lecteur qui n’était pas endormi se souviendra que la vitesse est la dérivée de la position et l’accélération est la dérivée de la vitesse. Nous nous occupons d’intégration numérique parce que nous ne résolvons pas symboliquement les équations différentielles. Au lieu de cela, la fonction dérivée que nous connaissons (l’accélération, déterminée en utilisant la deuxième loi de Newton à partir de la force) est échantillonnée seulement à un nombre discret de valeurs de temps. Pour apprécier les difficultés, nous commençons avec une approche naïve et voyons où elle échoue.

Soit hh notre pas de temps en secondes ( 1/h1/h est la fréquence de simulation, ainsi, par exemple, si nous fonctionnons à 60 Hz, hh serait 1/601/60 ). La méthode d’intégration la plus simple est de supposer que la dérivée est constante pendant le pas. Supposons que le pas de temps actuel est le kk ième pas de temps. Alors la position pour le prochain pas de temps, k+1k + 1, est déterminée par

Intégration d’Euler de la vitesse en position

𝐩k+1=𝐩k+h𝐯k.\mathbf{p}_{k + 1} = \mathbf{p}_{k} + h\mathbf{v}_{k}.

Cette stratégie est connue sous le nom d’intégration d’Euler. Bien que l’intégration numérique puisse être un sujet « avancé » souvent enseigné après le calcul infinitésimal, l’intégration d’Euler est plus facile à comprendre pour la plupart des gens que la vraie (analytique) intégration. Il est courant d’utiliser l’intégration d’Euler pour introduire l’intégration analytique, ce que nous avons fait exactement dans la Figure 11.10 pour déterminer le mouvement d’un lapin, bien que nous n’ayons pas appelé la technique par son nom. Le point clé qui a été mis en évidence était que la simple intégration d’Euler ignore les changements dans la dérivée pendant le pas de temps, et c’est la source d’erreur. Comme nous l’avons vu, la façon la plus évidente de réduire l’erreur dans la réponse est de diminuer le pas hh. Dans certains cas, nous pouvons le réduire à la limite par des manipulations symboliques et arriver à une réponse parfaite (c’est-à-dire que nous utilisons l’intégration analytique). Mais parfois nous avons une fonction compliquée et tout ce que nous pouvons faire est d’évaluer (« échantillonner ») la fonction.

Considérons trois simulations différentes actuellement d’intérêt dans les jeux vidéo : les cheveux, le tissu et les fluides. Dans chaque cas, nous décomposons l’objet simulé en morceaux (« discrétiser » le problème), puis simulons chaque morceau en utilisant un ensemble simplifié de lois de force. Une stratégie de base pour le tissu est de modéliser le tissu comme un ensemble de sommets, où chaque sommet est connecté aux sommets voisins par des « ressorts » et est affecté par la traînée. Les forces subies par un sommet donné dans cette simulation dépendent à la fois de la position et de la vitesse du sommet et de ses voisins. Bien qu’il ne soit pas difficile de calculer les forces actives à un instant donné, le résultat ne peut pas être directement intégré en raison de la dépendance à la position et à la vitesse. C’est ce qui en fait un problème d’équations différentielles plutôt que de simple intégration. Ces équations différentielles ne sont généralement pas vulnérables à l’assaut frontal de la solution analytique ; nous devons utiliser l’intégration numérique.

Supposons que nous exprimions la vitesse d’un seul sommet de tissu comme une fonction du temps, approximée comme un polynôme (en utilisant son développement en série de Taylor ; voir la Section 11.4.6). Supposons que nous connaissons la valeur au temps tkt_{k} et que nous nous intéressons seulement à un petit intervalle entourant tkt_{k}. Alors nous pourrions écrire notre approximation sous la forme

𝐯(tk+h)=𝐯(tk)+h𝐜1+h2𝐜2+h3𝐜3+.\begin{matrix} {\mathbf{v}(t_{k} + h) = \mathbf{v}(t_{k}) + h\mathbf{c}_{1} + h^{2}\mathbf{c}_{2} + h^{3}\mathbf{c}_{3} + \cdots.} \\ \end{matrix}

L’intégration d’Euler est connue comme une méthode d’intégration numérique du premier ordre parce qu’elle correspond seulement jusqu’au terme de premier degré dans cette expression, h𝐜1h\mathbf{c}_{1}, qui dans ce cas est simplement l’accélération h𝐚(tk)h\mathbf{a}(t_{k}). Il est vrai que hh est de l’ordre de 1/60 et en général les termes d’ordre supérieur diminuent rapidement, mais nous ne savons rien sur la magnitude des 𝐜\mathbf{c}’s, donc plus nous pouvons correspondre de termes, meilleure est la précision obtenue.21 Si l’accélération est constante, alors l’intégration d’Euler calculerait la vitesse exactement, mais si les forces dépendaient de la position ou de la vitesse, alors les termes d’ordre supérieur dans le développement, qui sont ignorés par l’intégration d’Euler, seraient non nuls.

Afin d’améliorer nos résultats, nous devrons utiliser une méthode d’intégration numérique d’ordre supérieur capable de correspondre à plus des termes dans l’Équation (12.33). Une technique courante et importante est Runge-Kutta, et l’idée est de prendre un ou plusieurs pas d’essai et d’échantillonner les forces à différents emplacements. Ensuite, les échantillons des pas d’essai sont combinés de manière intelligente. Le domaine de l’intégration numérique est un domaine mature avec une grande quantité de littérature et de nombreuses techniques bien étudiées différentes. Il serait approprié de discuter de plusieurs de ces méthodes dans un livre d’introduction qui se concentre uniquement sur la simulation physique, mais nous regrettons que ce soit juste au-delà de ce que nous pouvons insérer en quelques chapitres dans ce livre d’introduction général. Cependant, nous voulons souligner deux messages importants concernant l’intégration numérique.

Le premier message a déjà été transmis : nous voulons simplement que vous appréciiez les lacunes de l’intégration d’Euler et soyez conscient que d’autres méthodes existent qui offrent différents compromis entre précision, stabilité et performance. Certains intégrateurs sont mieux adaptés à différents objectifs. Presque n’importe quel intégrateur fonctionnera mieux que l’intégration d’Euler pour les simulations que les gens souhaitent actuellement résoudre en temps réel : tissu, cheveux, fluides et simulation de corps mous, combinant la physique dynamique et l’animation pré-générée pour les personnages articulés (en particulier humanoïdes), et autres. Toute personne intéressée par ces simulations plus avancées trouvera une compréhension des méthodes d’intégration comme prérequis. Les sources listées dans les lectures suggérées dans la Section 12.7 sont un bon point de départ.

Le deuxième message est que bien que les méthodes d’ordre supérieur soient de meilleurs choix pour les simulations de « haute classe » que nous avons nommées, pour la simulation de corps rigides, la triviale intégration d’Euler est encore souvent utilisée. Pourquoi ? En un mot : les contraintes. Dans certaines simulations, la force est une fonction continue du temps ou de la position, et possède un beau développement en série de Taylor qui est bien servi par les méthodes d’intégration d’ordre supérieur. Les simulations basées sur des connexions de type ressort ou celles qui traitent les collisions de manière douce, à la façon d’une méthode de pénalité, se comportent ainsi. Pour de telles simulations, l’utilisation d’un intégrateur d’ordre supérieur (qui augmente le nombre de pas d’essai de la « boucle interne » et d’échantillons par pas de temps) offre une meilleure réduction de l’erreur pour une quantité donnée de temps CPU, comparée à la réduction de hh (ce qui nécessite plus d’itérations de la « boucle externe »). Cependant, les contraintes dans les simulations de corps rigides sont souvent discontinues et nécessitent intrinsèquement une approche basée sur LCP. Lorsque ces fonctions discontinues sont approximées par la loi de Hooke, la constante de ressort doit être très grande, et cela conduit à l’instabilité. En fait, les équations différentielles résultantes sont désignées comme des équations « raides », qui sont connues pour nécessiter une intégration implicite plutôt qu’explicite. Malheureusement, les solveurs de contraintes basés sur la vitesse—comme nous l’avons mentionné, ceux-ci sont actuellement un type populaire de simulation—opèrent en ajustant les vitesses pour satisfaire les contraintes, et essentiellement ils doivent être capables de « voir dans le futur » pour savoir comment les changements de la vitesse ajustée proposée affecteront la position intégrée et donc la satisfaction de la contrainte. Les méthodes d’intégration plus sophistiquées rendent cette divination plus compliquée. (Les méthodes d’intégration implicites utilisées pour résoudre les équations raides opèrent essentiellement en « voyant dans le futur ».) En bref, en raison des méthodes actuelles de résolution des contraintes de contact et d’articulation, la diminution du pas hh offre une utilisation plus attractive du temps CPU que les intégrateurs d’ordre supérieur, du moins selon les votes exprimés par les concepteurs des simulateurs de corps rigides en temps réel les plus populaires utilisés dans les jeux vidéo en ce moment. Peut-être dit plus franchement : la stabilité est actuellement plus valorisée que la précision dans la simulation en temps réel.

Après avoir soulevé de nombreuses complications et les avoir promptement mises de côté, nous sommes maintenant prêts à présenter les équations de base pour l’intégration d’Euler de la position, de la vitesse et de l’accélération.

Intégration d’Euler de l’accélération et de la vitesse

𝐚k=𝐟k/m(deuxième loi de Newton),𝐯k+1=𝐯k+h𝐚k(intégrer l’accélération),𝐩k+1=𝐩k+h𝐯k+1(intégrer la vitesse).\begin{matrix} \mathbf{a}_{k} & {= \mathbf{f}_{k}/m} & & {\text{(deuxième loi de Newton)},} \\ \mathbf{v}_{k + 1} & {= \mathbf{v}_{k} + h\mathbf{a}_{k}} & & {\text{(intégrer l'accélération)},} \\ \mathbf{p}_{k + 1} & {= \mathbf{p}_{k} + h\mathbf{v}_{k + 1}} & & {\text{(intégrer la vitesse)}.} \\ \end{matrix}

Ce sont des opérations clés, voyons donc comment elles pourraient être implémentées en C++. Le code dans le Listing 12.7 est un peu plus facile à lire que les équations, car l’ordre des opérations rend l’indexation inutile.

struct Particle {
    Vector3 pos;    // position mondiale du centre de masse
    Vector3 linVel; // vitesse
    Vector3 force;  // forces actuelles
    float   mass;   // masse de l'objet

    // Effectuer un simple pas d'Euler en avant dans le temps par le pas de temps dt
    void eulerIntegrate(float dt) {
        Vector3 acceleration = force / mass;

        linVel += acceleration * dt;
        pos += linVel * dt;
    }
}

12.6.4Intégration de la rotation

Disons maintenant quelques mots sur l’intégration des données de rotation 3D. Quel est l’équivalent de 𝐩k+1=𝐩k+h𝐯k\mathbf{p}_{k + 1} = \mathbf{p}_{k} + h\mathbf{v}_{k} pour la rotation ? Présentons d’abord quelques résultats bien connus de la mécanique concernant la relation entre la vitesse angulaire et la dérivée des valeurs d’orientation.

Considérons un point arbitraire 𝐫\mathbf{r} fixé sur un corps qui tourne autour de son centre de masse à une vitesse angulaire instantanée ωω\omega\omega. Nous supposons que l’espace de coordonnées utilisé pour décrire 𝐫\mathbf{r} a son origine au centre de masse du corps, mais que les axes ne tournent pas avec le corps. (Dans ce livre, nous disons que nous exprimons les coordonnées du point en « espace vertical ». Ces coordonnées sont aussi parfois appelées « coordonnées du centre de masse ».) La Section 11.8.2 a montré comment calculer la vitesse de ce vecteur : 𝐯=ωω×𝐫\mathbf{v} = {\omega\omega} \times \mathbf{r}. Cela peut être écrit de manière équivalente comme

𝐫˙=ωω×𝐫.\begin{matrix} {\overset{˙}{\mathbf{r}} = {\omega\omega} \times \mathbf{r}.} \\ \end{matrix}

La Section 11.8 a indiqué que c’est une caractéristique de base du mouvement circulaire uniforme que la vitesse varie continuellement en raison de l’accélération centripète. Puisque la vitesse n’est pas constante, comme nous venons de le voir, un simple pas d’Euler n’est pas précis : 𝐫(t+h)𝐫(t)+h𝐫˙\mathbf{r}(t + h) \neq \mathbf{r}(t) + h\overset{˙}{\mathbf{r}}. Cependant, si nous zoomons suffisamment, un petit segment du chemin circulaire commence à ressembler beaucoup à une ligne droite, et le pas d’Euler n’est pas si mauvais. En d’autres termes, avec un hh suffisamment petit, ou une vitesse angulaire ωω\omega\omega suffisamment lente, l’approximation peut être acceptable : 𝐫(t+h)𝐫(t)+h𝐫˙\mathbf{r}(t + h) \approx \mathbf{r}(t) + h\overset{˙}{\mathbf{r}}.

Tout ce que nous avons dit jusqu’à présent fonctionne pour tout vecteur 𝐫\mathbf{r}, alors appliquons ces idées aux axes du corps eux-mêmes. Rappelons que la matrice de rotation 𝐑\mathbf{R} décrit l’orientation de l’objet et fait tourner les vecteurs lignes à gauche de l’espace local vers l’espace vertical. Les lignes de 𝐑\mathbf{R} sont formées par les axes du corps exprimés en espace vertical. Ce que nous voulons faire est d’appliquer l’Équation (12.34) à chaque axe du corps (c’est-à-dire prendre le produit vectoriel de ωω\omega\omega avec chaque ligne). Heureusement, nous pouvons écrire l’opération de produit vectoriel comme une multiplication matricielle (voir l’Exercice 4.8) comme

𝐫˙=ωω×𝐫=𝐫[0ωzωyωz0ωxωyωx0].\overset{˙}{\mathbf{r}} = {\omega\omega} \times \mathbf{r} = \mathbf{r}\begin{bmatrix} 0 & \omega_{z} & {- \omega_{y}} \\ {- \omega_{z}} & 0 & \omega_{x} \\ \omega_{y} & {- \omega_{x}} & 0 \\ \end{bmatrix}.

Maintenant, la dérivée de la matrice de rotation peut être exprimée comme le produit matriciel

Dérivée de la matrice d’orientation 𝐑\mathbf{R} pour un objet avec vitesse angulaire 𝛚𝛚\mathbf{\omega}\mathbf{\omega}

𝐑˙=𝐑[0ωzωyωz0ωxωyωx0].\overset{˙}{\mathbf{R}} = \mathbf{R}\begin{bmatrix} 0 & \omega_{z} & {- \omega_{y}} \\ {- \omega_{z}} & 0 & \omega_{x} \\ \omega_{y} & {- \omega_{x}} & 0 \\ \end{bmatrix}.

Qu’est-ce que cela signifie ? Tout comme avec un seul vecteur 𝐫\mathbf{r} et sa dérivée 𝐫˙\overset{˙}{\mathbf{r}}, chaque élément dans 𝐑˙\overset{˙}{\mathbf{R}} donne la dérivée de l’élément correspondant dans 𝐑\mathbf{R}. En réalité, tout élément particulier de la fonction matricielle 𝐑(t)\mathbf{R}(t) oscillera dans la plage [1,1]\lbrack - 1,1\rbrack. Mais comme avant, pour de petites valeurs de hh (et de petites vitesses angulaires ωω\omega\omega !), une petite section de ce motif courbé et oscillatoire ressemble à une ligne droite, et le simple pas d’Euler 𝐑k+1𝐑k+h𝐑˙k\mathbf{R}_{k + 1} \approx \mathbf{R}_{k} + h{\overset{˙}{\mathbf{R}}}_{k} peut être acceptable. Cependant, avec les matrices de rotation, une nouvelle complication est présente : la matrice résultante est peu susceptible d’être orthonormale. En essence, nous prenons des pas d’Euler sur chaque composante de manière isolée, en ignorant leur interdépendance. La solution est de ré-orthogonaliser la matrice (voir la Section 6.3.3) après chaque pas.

Si l’orientation du corps est spécifiée en utilisant un quaternion plutôt qu’une matrice de rotation, la même technique de base peut encore être utilisée : trouver la dérivée (composante par composante) de l’orientation, effectuer un simple pas d’Euler sur chaque composante de manière indépendante, puis corriger l’orientation. Avec les quaternions, la dérivée est donnée par

Dérivée du quaternion d’orientation 𝐪\mathbf{q} pour un objet avec vitesse angulaire 𝛚𝛚\mathbf{\omega}\mathbf{\omega}

𝐪˙=12ωω𝐪,\overset{˙}{\mathbf{q}} = \frac{1}{2}{\omega\omega}\mathbf{q},

où le vecteur de vitesse angulaire 3D ωω\omega\omega a été étendu dans l’espace quaternion avec w=0w = 0. (Eberly [3] dérive ce résultat ; nous ne le prouverons pas ici.) Notez que nous n’attendons pas 𝐪˙\overset{˙}{\mathbf{q}} à être un quaternion de rotation (unitaire). Nous n’attendons pas non plus que le résultat de l’intégration d’Euler, 𝐪k+1𝐪k+h𝐪˙k\mathbf{q}_{k + 1} \approx \mathbf{q}_{k} + h{\overset{˙}{\mathbf{q}}}_{k} ait une longueur unitaire, et il doit donc être normalisé.

La technique d’intégration de l’orientation qui vient d’être décrite est standard. Lorsqu’on utilise cette technique, il y a deux sources d’erreur. La première est causée par l’intégration d’Euler elle-même, dans laquelle nous ignorons l’accélération angulaire (et les dérivées d’ordre supérieur) et procédons comme si la vitesse angulaire était constante. Cette erreur existait avec les données linéaires ainsi qu’angulaires ; mais lors de l’intégration de grandeurs linéaires, c’était la seule source d’erreur. La deuxième source d’erreur est due à l’utilisation de dérivées composante par composante, qui ne tient pas compte de l’interdépendance des composantes de la matrice de rotation ou du quaternion. Ce type d’erreur est unique aux données angulaires, car les composantes de données positionnelles sont indépendantes (du moins lorsque les coordonnées cartésiennes sont utilisées). Heureusement, cette source d’erreur peut être éliminée.

Supposons pour l’instant que l’objet dont l’orientation est décrite par la matrice de rotation 𝐑\mathbf{R} ou le quaternion 𝐪\mathbf{q} est en rotation à vitesse angulaire constante ωω\omega\omega. Dans ce cas courant, aucune précision n’est perdue en ignorant l’accélération angulaire, mais il y a une perte de précision, qui augmente avec un hωωh{\omega\omega} plus grand. La solution est directe : déterminer la rotation finie qui se produirait dans ce pas de temps, puis appliquer le déplacement angulaire approprié. Nous avons déjà les outils à notre disposition. Nous convertissons la rotation hωωh{\omega\omega} de la forme d’application exponentielle en forme axe-angle (voir la Section 8.4). Ce déplacement angulaire peut alors être converti en matrice de rotation (voir la Section 5.1.3) ou quaternion (voir la Section 8.5.2), et concaténé avec la rotation actuelle. Essentiellement, ce que nous avons fait est de choisir un meilleur système de coordonnées dans lequel effectuer l’intégration d’Euler.

Puisqu’il est légèrement plus coûteux d’effectuer la deuxième méthode, une question valide est : En vaut-il la peine ? Dans la situation courante de vitesse angulaire constante, la deuxième méthode est exacte pour tout pas hh, en ignorant les erreurs dues aux arrondis en virgule flottante. Dans ce cas, si la vitesse angulaire est élevée, ou la précision requise est élevée (par exemple, les aiguilles d’une horloge), alors passer à cette méthode alternative sera probablement un gain. Cependant, l’erreur introduite par l’intégration d’Euler peut interférer avec l’erreur introduite par la méthode de dérivée composante par composante soit de manière constructive soit destructive, il n’y a donc aucune garantie que la réduction d’une source d’erreur améliorera réellement la précision du résultat final dans tous les cas. C’est pourquoi la méthode d’intégration du déplacement angulaire est une option dans certains moteurs physiques.

12.7Lectures suggérées

Notre discussion a été nécessairement compacte, et nous frémissons à la dérision que les vrais experts en physique doivent ressentir envers notre présentation. Il est clair qu’un étudiant avec un sérieux intérêt pour la simulation informatique aura besoin d’une base en physique plus approfondie que celle fournie ici. Les bases de la mécanique sont généralement couvertes dans le premier semestre d’un cours de physique traditionnel, pour lequel il existe de nombreux manuels de haute qualité. En préparant ce livre, nous avons utilisé le vénérable manuel de Resnick et Halliday [12], qui a l’avantage distinctif d’être incroyablement peu coûteux, et également un manuel de Knight [9]. Personne ne devrait jamais apprendre ce matériel sans démonstrations en classe ; un étudiant s’engageant dans l’autoformation (ou coincé avec un professeur de physique ennuyeux) n’a pas besoin de manquer cela, car de nombreuses démonstrations peuvent être trouvées en ligne. Nous recommandons les conférences du Professeur Walter Lewin, disponibles sur MIT OpenCourseWare à ocw.mit.edu.

Trois livres sont recommandés pour leur discussion de la simulation physique adaptée aux besoins des jeux vidéo. Physics for Game Developers de Bourg [1] est un texte d’introduction, avec une bonne couverture des bases et une présentation unique de nombreuses lois de force appliquées à différents types de simulations de véhicules. Physics-Based Animation [5] contient une richesse d’informations pour les simulations de corps rigides et continues, incluant un aperçu de plusieurs approches différentes de simulation multicorps ; ce texte est votre meilleure option pour combler les lacunes laissées par les vagues gestes de la main que nous avons dû faire ici. Game Physics d’Eberly [3] considère les moteurs physiques pour les jeux d’une manière légèrement plus académique et orientée mathématiques. Il contient de bonnes discussions sur les techniques d’intégration numérique et une section unique concernant les avantages potentiels (actuellement non réalisés) de la dynamique lagrangienne. Pour le livre de Bourg, le calcul infinitésimal couvert dans ce livre est suffisant, mais une exposition aux équations différentielles est recommandée avant d’aborder les deux livres plus avancés.

Une excellente façon d’apprendre la simulation physique en temps réel est d’étudier le code d’une simulation. Deux moteurs physiques open source bien conçus et documentés qui ont été utilisés dans des jeux vidéo commerciaux ont été influents dans la rédaction de ce livre et méritent d’être mentionnés. L’Open Dynamics Engine de Russell Smith [14], disponible en ligne à http://ode.org/, est légèrement plus ancien et n’est pas en développement actif, mais a été influent dans l’industrie et est une ressource utile. Une collaboration plus récente de divers experts de l’industrie appelée Bullet Physics (http://bulletphysics.org/) est activement maintenue et a été utilisée dans de nombreux jeux et même quelques films Dreamworks. Le moteur et le site web sont tous deux des ressources utiles.

La détection de collision est une grande partie de tout moteur physique, à la fois en termes de lignes de code et de temps CPU consommé. Malheureusement, il est difficile de dire « un peu » sur la détection de collision, et nous n’avons pas eu l’espace de lui rendre justice dans ce livre. Real-Time Collision Detection d’Ericson [4] est notre meilleure recommandation, mais le texte de van den Bergen [16] est également utile. Une quantité significative de matériel sur la détection de collision peut être trouvée dans les livres d’Eberly sur les moteurs physiques [3] et les outils géométriques pour les jeux [13].

Beaucoup des problèmes mathématiques qui surviennent dans la simulation informatique entrent dans la large catégorie du calcul scientifique. (Les anciens noms pour ce même domaine de base sont « mathématiques appliquées » et « analyse numérique ».) Numerical Recipes in C [11] est un travail classique pour les ingénieurs, avec des explications claires et une grande boîte à outils de code source. Plusieurs bons manuels existent sur le sujet ; nous pouvons recommander Scientific Computing de Heath [6]. Le manuel de Strang [15] a l’avantage remarquable qu’un cours complet de conférences d’accompagnement est disponible gratuitement sur MIT OpenCourseWare à ocw.mit.edu.

Chris Hecker a une collection de ressources pour la physique en temps réel à http://chrishecker.com/Physics_References.

Exercices

  1. Dans un univers de dessin animé, un voilier peut être propulsé en plaçant un ventilateur dans le voilier et en le pointant vers la voile. Expliquez pourquoi cela ne fonctionne pas dans le monde réel, en utilisant les lois de Newton.

  2. Un garçon et une fille font un bras de fer. La fille commence à gagner. Nommez toutes les forces importantes impliquées, et décrivez quel déséquilibre de force cause la victoire progressive de la fille.

  3. Vrai ou faux : Les objets plus légers tombent plus vite que les objets plus lourds parce que la force de gravité est constante près de la surface de la Terre.

  4. La Station spatiale internationale orbite la Terre à environ 340 km au-dessus de la surface de la Terre à une vitesse d’environ 27 740 km/h. (L’orbite est en réalité elliptique, mais ignorez cela pour l’instant.) Quelle est l’accélération causée par la gravité terrestre dans cet environnement de « gravité zéro » ? De plus, si la gravité terrestre a encore un effet significatif, pourquoi les astronautes de la station spatiale sont-ils en « apesanteur » ? (Note : voir aussi l’Exercice 11.12.)

  5. Un bloc de béton est placé sur une rampe en bois. Selon le Tableau 12.1, quel est l’angle critique d’inclinaison de la rampe à partir duquel le bloc commencera à glisser ? Si nous conduisions l’expérience sur la lune, l’angle critique augmenterait-il, diminuerait-il ou resterait-il le même ?

    1. (a)Un poids de masse mm est suspendu à un ressort de rigidité kk, faisant augmenter la longueur du ressort d’une distance x0x_{0}. Quelle est la formule qui relie mm, x0x_{0} et kk ?

    2. (b)Un objet de 5,00 kg est suspendu à un ressort, faisant augmenter la longueur du ressort de 10,0 cm. Quelle est la constante de ressort kk ? (Assurez-vous d’inclure les unités appropriées.)

    3. (c)Un objet différent est suspendu au même ressort, cette fois faisant allonger le ressort de 17,0 cm. Quelle est la masse de cet autre objet ?

    4. (d)Plus tard, dans un environnement différent, un poids de 1,00 kg est suspendu à ce même ressort, cette fois provoquant une augmentation de longueur de 8,0 cm. Que pouvez-vous dire de cet environnement qui est différent de l’environnement original ? Quelles sont certaines explications possibles pour ces différences ?

  6. Un ressort horizontal de rigidité 1,00×102N/m1,00 \times 10^{2}\ {N/m} est fixé à une extrémité, et une masse de 5,00 kg est connectée à l’autre extrémité, de sorte que la masse glisse de part et d’autre sur une surface sans friction. Le ressort est étendu depuis sa position de repos d’une distance de 14,7 cm.

    1. (a)Quelle est la fréquence de l’oscillation ?

    2. (b)Quelle est l’amplitude de l’oscillation ?

    3. (c)Quelle est la vitesse de la masse lorsqu’elle passe par la position de repos ?

  7. Un homme pesant 75,0 kg se tient à une extrémité d’un wagon de train. Le wagon pèse 1,00×1031,00 \times 10^{3} kg, fait 20,0 m de long, et vient du futur, où ils ont inventé un type spécial de roue qui roule sur les rails sans friction. Utilisez un espace de coordonnées où la direction avant est +x+ x. L’homme marche de l’arrière du wagon à l’avant à une vitesse de 1,25 m/s.

    1. (a)Quelles sont les vitesses de l’homme et du wagon, par rapport à la Terre, pendant la marche de l’homme ?

    2. (b)Lorsque l’homme atteint l’extrémité du wagon, de combien l’homme et le wagon se sont-ils déplacés, dans les coordonnées mondiales ?

    3. (c)Et si, plutôt que de marcher à vitesse constante, l’homme prend le plus de vitesse possible puis s’arrête brusquement au bout du wagon. Qu’est-ce qui changerait dans le mouvement du wagon ? Et les positions finales ?

    L’expérience est répétée (l’homme marche à vitesse constante), mais cette fois le wagon et l’homme ont une vitesse initiale de +5,00 m/s.

    1. (d)Quelles sont les vitesses de l’homme et du wagon, par rapport à la Terre, pendant la marche de l’homme ?

    2. (e)Au moment où l’homme atteint l’extrémité du wagon, de combien l’homme et le wagon ont-ils été déplacés par rapport à la Terre ?

  8. Considérez la collision de voiture entre Grant et Kari dans la Section 12.4.1. Calculez la magnitude de l’impulsion de collision, mais cette fois au lieu de supposer une collision parfaitement inélastique, utilisez un coefficient de restitution de e=0,1e = 0,1. (Supposez une normale de contact à 20o20^{o} ouest du sud.) Quelles sont les vitesses résultantes des deux voitures ?

  9. Comment le singe dans la Figure 12.21 reste-t-il en équilibre sur la corde raide ? Comment la courbure de la barre aide-t-elle ?

    image

    Figure 12.21Comment ce singe reste-t-il en équilibre ?

  10. Deux cylindres ont la même forme et la même masse. L’un est creux, et l’autre est solide avec une densité uniforme. Lequel attendriez-vous qu’il soit plus difficile à faire rouler ?

  11. La distribution de masse d’un camion est approximée en utilisant trois boîtes pour la carrosserie et quatre cylindres pour les roues, comme indiqué dans la Figure 12.22.
    image

    Figure 12.22 Utilisation de primitives pour approximer la distribution de masse dans un camion

    Description Masse (kg) Centre de masse (cm) Dimensions (cm, x×y×zx \times y \times z )
    Carrosserie avant 1000 (0,100,225)(0,100,225) 200×80×150200 \times 80 \times 150
    Carrosserie centrale 600 (0,125,75)(0,125,75) 200×130×150200 \times 130 \times 150
    Carrosserie arrière 400 (0,100,120)(0,100, - 120) 200×80×240200 \times 80 \times 240
    Roue avant gauche 50 (100,35,230)( - 100,35,230) 20×70×7020 \times 70 \times 70
    Roue avant droite 50 (100,35,230)(100,35,230) 20×70×7020 \times 70 \times 70
    Roue arrière gauche 50 (100,35,150)( - 100,35, - 150) 20×70×7020 \times 70 \times 70
    Roue arrière droite 50 (100,35,150)(100,35, - 150) 20×70×7020 \times 70 \times 70

    Tableau 12.2Primitives utilisées pour approximer la masse d’un camion

    La position, la masse et les dimensions de ces primitives sont données par le Tableau 12.2.

    1. (a)Quelles sont les coordonnées du centre de masse du camion ?

    2. (b)Calculez le tenseur d’inertie pour chaque primitive, par rapport à son centre de masse. Supposez que toutes les primitives ont une densité uniforme. (Vous devrez trouver les formules appropriées en ligne.) Astuce : convertissez d’abord les mesures en mètres.

    3. (c)Utilisez le théorème des axes parallèles pour calculer le tenseur d’inertie du camion par rapport à son centre de masse.

Nous aimons la force et nous nous soucions très peu de la façon dont elle se manifeste.

— Ralph Waldo Emerson (1808–1882)

Références

[1] David M. Bourg.   Physics for Game Developers.   Sebastapol, CA : O’Reilly Media, 2002.

[2] Ronald N. Bracewell.   The Fourier Transform and Its Applications, deuxième édition.   New York : McGraw-Hill, 1978.

[3] David H. Eberly.   Game Physics.   San Francisco : Morgan Kaufmann Publishers, 2004.

[4] Christer Ericson.   Real-Time Collision Detection.   San Francisco : Morgan Kaufmann Publishers, 2005.

[5] Kenny Erleben, Jon Sporring, Knud Henricksen, et Henrik Dohlmann.   Physics-Based Animation.   Boston : Charles River Media, 2005.

[6] Michael T. Heath.   Scientific Computing: An Introductory Survey, deuxième édition.   New York : McGraw-Hill, 2002.   http://www.cse.illinois.edu/heath/scicomp/.

[7] Chris Hecker.   « Physics, Part 3: Collision Response. »   Game Developer Magazine, pp. 11–18.   http://chrishecker.com/Rigid_Body_Dynamics#Physics_Articles.

[8] Chris Hecker.   « Physics, Part 4: The Third Dimension. »   Game Developer Magazine, pp. 15–26.   http://chrishecker.com/Rigid_Body_Dynamics#Physics_Articles.

[9] Randall D. Knight.   Physics for Scientists and Engineers.   Reading, MA : Addison-Wesley, 2004.   http://wps.aw.com/aw_knight_physics_1/.

[10] Brian Vincent Mirtich.   « Impulse-based Dynamic Simulation of Rigid Body Systems. »   Thèse de doctorat, Université de Californie à Berkeley, 1996.

[11] William H. Press, Saul A. Teukolsky, William T. Vetterling, et Brian P. Flannery.   Numerical Recipes in C, deuxième édition.   Cambridge, Royaume-Uni : Cambridge University Press, 1992.   http://www.nr.com/.

[12] Robert Resnick et David Halliday.   Physics, troisième édition.   New York : John Wiley and Sons, 1977.

[13] Philip J. Schneider et David H. Eberly.   Geometric Tools for Computer Graphics.   San Francisco : Morgan Kaufmann Publishers, 2003.

[14] Russell Smith.   « Open Dynamics Engine User Guide. »   http://www.ode.org/ode-latest-userguide.html.

[15] Gilbert Strang.   Computational Science and Engineering.   Cambridge, Royaume-Uni : Wellesley-Cambridge, 2007.

[16] Gino van den Bergen.   Collision Detection in Interactive 3D Environments.   San Francisco : Morgan Kaufmann Publishers, 2004.

  1. Certaines de ces expériences ont eu lieu dans l’imagination des physiciens.

  2. Vous vous souviendrez, bien sûr, du robot qui aime les sandwichs au hareng de la Section 3.3. Ce robot est un modèle plus récent avec une programmation améliorée qui lui permet de ramasser le sandwich sans cuillère—une innovation majeure dans le commerce des robots mangeurs de sandwichs au hareng.

  3. Sauf pour un ascenseur en chute libre sur le point de s’écraser au sol.

  4. Son/sa/son…puisque les extraterrestres sont tout aussi susceptibles d’avoir trois genres que deux, les limitations de la langue française ne sont pas à la hauteur des exigences de la rectitude politique interstellaire. Si des extraterrestres lisent ce livre, veuillez noter que nous avons essayé, et donc ne pulvérisez pas notre planète. Nous y sommes très attachés.

  5. On pourrait facilement imaginer Yoda dire « À toute action, une réaction égale et opposée, il y a toujours. »

  6. En fait, ce n’est pas vrai. Au moment de la rédaction de ce texte, les physiciens croient qu’il existe quatre forces fondamentales. Presque toutes les forces causées par la matière heurtant d’autres matières sont essentiellement électriques car ce sont les forces électriques qui maintiennent les atomes séparés les uns des autres. Cependant, les situations dans lesquelles la matière repousse d’autres matières sont si diverses qu’au niveau macroscopique, il est utile d’avoir de nombreuses lois de force différentes pour décrire le comportement.

  7. Contrairement au frottement.

  8. Astuce : assurez-vous d’utiliser l’expression « corps céleste » pendant que vous y êtes.

  9. Cela est souvent causé par un amortissement excessif dans le système physique utilisé pour aider à masquer l’instabilité.

  10. Fletch : J’aime appeler cette technique « gravité du Seigneur des Anneaux ». Cela me rappelle les grands escaliers qui sont détruits pendant la fuite des Mines de la Moria.

  11. Le Professeur Walter Lewin fait cette démonstration en classe dans son cours de physique au MIT. Toutes les conférences peuvent être téléchargées gratuitement via MIT OpenCourseWare à http://ocw.mit.edu.

  12. Ce n’est pas la définition la plus large possible de « système de contrôle », mais c’est la plus courante.

  13. Si vous décidez de faire cela, voici quelques conseils : (1) Soyez prudent. Sérieusement, nous déclinons toute responsabilité pour les personnes imprudentes. (En parlant d’imprudence, un auteur a dû remplacer la roue de la tondeuse à gazon de son père, dont on a constaté qu’elle avait une trajectoire parfaitement parabolique, mais hélas incapable de résister à l’impact à l’atterrissage.) (2) Nous avons pris des photos fixes à environ 4 Hz, mais utiliser un appareil photo plus performable capable de prendre plus d’images par seconde, ou peut-être extraire des images d’une vidéo pourrait mieux fonctionner. (3) Envoyez-nous vos photos à gamemath.com !

  14. Nous choisissons de faire de Kari la mauvaise conductrice non pas en raison d’un biais de genre ou parce qu’elle est rousse, mais en supposant qu’il y a moins de Karis que de Grants susceptibles d’être offensés.

  15. Encore un moment MythBusters.

  16. En fait, un objet n’a pas nécessairement besoin d’être stationnaire pour être « spécial » comme ça. Considérez une plateforme qui se déplace le long d’un chemin de spline créé par un concepteur de niveau, ou tout autre objet animé à la main qui n’est pas autorisé à dévier de sa trajectoire prescrite. Ces objets dits contrôlés cinématiquement se déplacent dans le monde et doivent être connus du moteur physique si d’autres objets (non contrôlés cinématiquement !) doivent interagir avec eux, mais de tels objets ne répondent pas aux forces, et leur position n’est pas mise à jour par le moteur physique. Bien que la masse de ces objets soit traitée comme infinie, une réponse aux collisions correcte nécessite la connaissance de la vitesse (déterminée cinématiquement).

  17. Comme Werner von Braun, qui était vraiment un ingénieur en fusées, a dit : « La recherche, c’est ce que je fais quand je ne sais pas ce que je fais. »

  18. Ça rime avec « roue »

  19. Rappelons que notre convention dans ce livre est d’utiliser des vecteurs lignes, puisque la majorité des matrices rencontrées dans les applications interactives 3D sont des matrices de transformation, et l’ordre de lecture de gauche à droite est un avantage utile. Dans la dérivation ci-dessus, nous avons utilisé des vecteurs colonnes pour des raisons pédagogiques et esthétiques (le tenseur d’inertie n’est pas une matrice de transformation), mais honte à nous pour être incohérents. Désormais, nous nous en tiendrons à notre convention et mettrons les vecteurs à gauche.

  20. Les détails précis dépendent de la méthode d’intégration numérique. Certaines méthodes d’intégration utilisent des valeurs historiques afin d’approximer les dérivées d’ordre supérieur.

  21. D’habitude. Press et al. \cite_need_fixup{numerical-recipes} soulignent que l’ordre supérieur ne garantit pas toujours une meilleure précision.

<< Mécanique 1 : Cinématique linéaire et calcul infinitésimal

Retour en haut

Courbes en 3D >>