Les forces ¶

Motivation¶
Pour développer des jeux, il est essentiel de comprendre comment les forces agissent sur les objets. Cela nous permet de créer des mouvements réalistes et d'interagir avec l'environnement de manière convaincante.
Introduction¶
Dans ce chapitre, on verra comment appliquer différents types de forces à un objet ou plusieurs

Clone et branchage du projet¶
Si ce n'est déjà fait, clonez les projets du cours :
Créez une branche pour ce chapitre :
Force¶
- En physique, une force est une interaction qui tend à modifier la vitesse d’un objet.
- Lorsque la vitesse est modifiée, il y a obligatoirement une accélération.
- Une force peut accélérer le déplacement d’un objet avec une masse.
- Une force possède une magnitude et une direction.
- Vecteur!
- Ainsi, une force est un vecteur qui cause l’accélération d’un objet avec une masse.
Première loi de Newton¶
- Un objet au repos reste au repos, un objet en déplacement reste en déplacement.
- Plus en détail : Un objet au repos reste au repos, un objet en déplacement reste en déplacement à une vitesse et direction constantes à moins d’une force non équilibrée. Par exemple dans l’espace.
- \(F = ma\) où \(m\) est la masse et \(a\) l’accélération.
- Celle que tout le monde a vue au secondaire!
- La vitesse d’un objet atteindra une constante lorsqu’une force contraire annulera l’effet de la force initiale, i.e., que la somme des forces sera égale à zéro.
- Ex : On applique une force initiale à une balle dans l’espace loin des astres, l’objet atteindra une vitesse constante.
- Une balle qui tombe d’un avion atteindra une vitesse terminale au moment où la résistance de l’air sera égale à la force de gravité.
- En programmation, la vélocité d’un objet va demeurer constante si elle est dans un état d’équilibre.

Troisième loi de Newton¶
- Pour toute action, il y a une réaction égale et contraire.
- En d’autres termes, les forces sont toujours en paire. Les deux forces sont égales mais dans une direction contraire.
- Il faut séparer les éléments en deux systèmes distincts.
- Exemples :
- Si je pousse un train immobile, le train ne bougera pas car une force égale va contre la mienne.
- Il y a le système du train et le mien.
- Si je pousse mon bureau, le bureau applique la même force sur ma main.
- On peut le sentir car le bureau compressera ma main et le bureau se déplacera à un moment donné.
- Si je pousse un train immobile, le train ne bougera pas car une force égale va contre la mienne.
- Autres exemples
Deuxième loi de Newton¶
- C'est la loi la plus importante pour nous.
- La force est égale à la masse multipliée par l’accélération.
-
L’accélération est directement proportionnelle à la force et inversement proportionnelle à la masse.
- Ainsi, si vous êtes sur un chariot, le plus fort que l’on vous pousse, le plus rapide que vous vous déplacerez. Toutefois, plus lourd vous êtes, plus lentement vous vous déplacerez.

- Ainsi, si vous êtes sur un chariot, le plus fort que l’on vous pousse, le plus rapide que vous vous déplacerez. Toutefois, plus lourd vous êtes, plus lentement vous vous déplacerez.
Ainsi la formule est :
- \(F = ma\)
On peut la réécrire en fonction de l’accélération :
- \(a = \frac{F}{m}\)
C'est cette formule que l'on va utiliser pour simuler les forces.
Poids vs masse¶
- La masse d’un objet est une mesure de la quantité de matière dans un objet qui est exprimée en kilogramme.
- Le poids, souvent mal interprété comme étant la masse, est techniquement la force de gravité sur un objet, soit le poids est la masse multipliée par la gravité, ce qui donne des Newtons.
- La densité (\(\rho\) dit rhô) est la quantité de masse par unité de volume.
- On va en avoir besoin tantôt.
Exemple¶
- Pour simplifier la compréhension, nous allons utiliser une masse (\(m\)) de 1 dans les premiers exemples.
- Ainsi \(F=ma\) devient \(F = a\).
- Disons que l’on reprend la classe
Moveravec les propriétéslocation,velocity, etacceleration. - La classe
Moverest disponible dans le projets02_forces_01dans les exemples Processing.- Cliquez sur le lien pour télécharger et ouvrir le fichier directement.
- Notre but est d’appliquer une force.
- Par exemple :
mover.applyForce(wind) - Ou encore :
mover.applyForce(gravity)
- Par exemple :
Ajoutez la méthode suivante à la classe Mover :
Dans le fichier principal, voici la nouvelle méthode update ainsi qu'un vecteur vent :
Essayez-le vous-même : le curseur contrôle la force du vent appliquée à chaque image (comme dans mover.applyForce(wind) ci-dessus). Le Mover rebondit sur les bords du canevas, exactement comme dans le projet s02_forces_01.
Accumulation des forces¶
- Disons que l’on désire appliquer du vent et de la gravité en simultané.
-
Si l’on prend cet exemple avec le code précédent, ce code est brisé car le vent sera toujours écrasé par la gravité! En effet, les paramètres sont passés par référence. N'oubliez pas que les vecteurs sont des objets.
-
L’accélération est égale à la somme de toutes les forces divisées par la masse. Cette action se nomme l’accumulation des forces.
Dans la classe Mover :

Dans le point précédent, il y encore un problème.
- Si l’on applique ce code, l’objet va toujours accélérer. Il faut remettre à zéro l’accélération à chaque appel de la méthode
update. - La méthode la plus simple serait de multiplier l’accélération par zéro à la fin du update
Le bac à sable ci-dessous combine les deux notions de cette section : le vent et la gravité s'additionnent (au lieu de s'écraser l'un l'autre), et maintenir le clic ajoute une poussée continue vers la droite. Cochez « Reproduire le bug » pour voir ce qui arrive quand on oublie de remettre l'accélération à zéro : l'objet se met à accélérer indéfiniment, même sans toucher à rien.
Travailler avec la masse¶
- L’ajout de la masse est relativement simple.
- En premier lieu, il faudra ajouter une propriété
massà notre objet qui sera unfloat.- Nous ne nous encombrerons pas des unités de mesure. Ce qui est important, c’est que celles-ci soient toutes sur la même base.
- Simplement, on pourrait modifier
applyForceainsi :
-
Cependant, il y a un problème. Qu’arriverait-il si on appliquait le même objet
forceà deux objets distincts?Indice
Problème au niveau du passage de paramètre
- Le problème avec la question précédente est que l’on diviserait la force lors de l’application au deuxième objet.
- N'oubliez pas que les vecteurs sont des objets.
- Ainsi, il faut créer une copie du vecteur avant de pouvoir l’additionner.
Le bac à sable ci-dessous illustre exactement ce problème : le même objet PVector (le vent) est transmis à trois Mover de masses différentes, chaque frame. En mode correct, chacun reçoit la pleine force du vent, simplement divisée par sa propre masse. Cochez « Reproduire le bug » pour voir ce qui se passe sans copie : le vecteur est divisé en place par le premier Mover, puis transmis déjà amoindri au suivant — la troisième balle (masse = 4) devient presque immobile, bien plus que ce que sa masse devrait justifier.
Exercice¶
- Améliorez la fonction en utilisant la méthode startique
divde la classePVectorau lieu de créer une copie.
Autres forces¶
- Le vent et la gravité sont des forces qui sont simples à simuler.
- Au secondaire, nous avons vu la friction, la tension, l’élasticité, et plus.
- Dans cette partie, nous allons voir la friction et comment déconstruire une formule de force trouvée sur Wikipedia.
- La friction est une force qui est utile pour simuler la perte de vitesse d’un objet.
- Par exemple, une balle qui roule au sol ou encore la résistance de l’air sur un objet qui est dans les airs.
Travailler avec les formules de forces¶
- Il faut comprendre le concept derrière une force pour pouvoir la simuler.
- On déconstruit une force en deux parties
- Comment calculons-nous la direction d’une force?
- Comment calculons-nous la magnitude d’une force?
- Traduire la formule en code pour un vecteur.
Friction¶

Voici un exemple où on trouve converti la formule de la friction en code :
-
La formule de la friction est \(\vec{F}_{\text{friction}} = -\mu N \hat{v}\)
-
\(\mu\) tient pour le coefficient de friction.
- Ce coefficient est déterminé par le type de matériau. Par exemple, de la glace a un coefficient faible alors que du caoutchouc a un coefficient plus élevé.
- \(N\) tient pour la force normale, soit celle qui est perpendiculaire au mouvement.
- \(\hat{v}\) est le vecteur unitaire de la vélocité.
- La friction est une force de dissipation, i.e., qu’elle fait perdre de l’énergie à une autre force.
Voici le code pour la friction :
Le bac à sable ci-dessous reprend exactement ce code : à chaque frame, une friction proportionnelle à μ s'oppose à la vélocité. Cliquez sur Lancer pour donner une impulsion à l'objet et observez comment il ralentit tout seul jusqu'à s'arrêter — sans friction, il continuerait indéfiniment (première loi de Newton). Maintenez le clic pour le pousser pendant qu'il ralentit, et essayez différentes valeurs de μ pour voir l'effet sur la distance parcourue.
Résistance des fluides¶
- Le coefficient n’est pas important ici car c’est de la simulation. Il faut retenir que c’est négatif.
- \(\rho\) représente la densité du fluide.
- \(\|v\|\)Est la magnitude de la vitesse.
- \(A\) est l’aire frontale qu’occupe l’objet. Par exemple, une Ferrari aura une aire plus petite qu’une Dodge Caravan.
- \(C_d\) est le coefficient de friction du fluide (semblable à la friction).
- \(\hat{v}\) est le vecteur unitaire de la vitesse.
- Pour nos besoins, occupons-nous que de la densité et de la surface de contact pour les scalaires
- On peut simplifier la simulation en utilisant l'équation suivante :
Ainsi en appliquant cette force lors du contact avec le "liquide", on aura l’impression que l’objet ralenti.
Attention! Ceci n'est pas la force de flottaison. Il s'agit d'une autre formule.
Le bac à sable ci-dessous est adapté de s02_forces_fluidDrag : dix balles de masse aléatoire tombent (la gravité est proportionnelle à la masse, donc toutes chutent à la même vitesse — comme dans la réalité), avec une légère friction de l'air en tout temps. En traversant une des deux bandes colorées, elles subissent en plus la formule de résistance ci-dessus, avec la masse de la balle qui joue le rôle de l'aire frontale \(A\). Remarquez que les balles ralentissent nettement plus dans la bande du milieu (densité plus élevée) que dans celle du bas :
Résumé¶
- Les forces sont cumulatives.
Exercices¶
Avec le projet inclus (s02_forces_01) avec ce cours :
- Corriger les bogues du projet.
- En utilisant les forces, simuler un ballon rempli d’hélium qui flotte vers le haut et qui rebondit lorsqu’il atteint le plafond.
- Ajouter du vent qui change au fil du temps avec un bruit de Perlin.
- Créez une application où il y a une cinquantaine d’objets de masse différente auxquels on applique des forces identiques à l’aide de la souris.
- Exemple : Cinquante objets auxquels on applique du vent.
- Créez une application où des objets tombent dans un liquide quelconque et dont l’on peut constater le ralentissement.
- Défi! Simuler un objet qui a un parachute qui ouvre.



