Vous voulez faire de chouette animations réalistes comme un saut ou une attraction de planètes ? Les forces sont la manière simple d'aborder ce problème !
Le concept de vecteur doit être assimilé, j'en fait une explication plus détaillée ici sur ma page de math.
J'introduis de manière concise la notion de déplacement, vitesse et accélération. Pour une autre introduction, je vous conseille les 4 vidéos [1] [2] [3] [4] sur le sujet sur Clipedia. Cliquez sur vidéos liées en dessous de la vidéo pour voir les vidéos. N'hésitez pas à mettre la vidéo en plein écran, à arrêter ou revenir en arrière si vous le voulez, ou même de regarder la vidéo en accéléré en cliquant sur le bouton vitesse du lecteur.
La vitesse est le déplacement divisé par le temps. Si vous vous déplacez de 5 mètres pendant 1 seconde, vous faites du 5 m/s (si votre vitesse ne change pas pendant le trajet : vitesse constante).
$v = \cfrac{\Delta x}{\Delta t}$
Graphiquement, la vitesse est la pente de la droite dans le graphique position en fonction du temps.
La vitesse, comme la position et le déplacement, est une grandeur vectorielle. Si vous vous déplacez en arrière, votre vitesse est négative. On peut aussi se déplacer à 45, 60 ou 180 degrés.
$\vec{v} = \cfrac{\vec{\Delta x}}{\Delta t}$
De même, l'accélération est la différence de vitesse divisé par le temps. Si vous gagnez 5 m/s en une 1 seconde, vous subissez une accélération de $\cfrac{5\ m/s}{s}$ $= 5\cfrac{m}{s} \cfrac{1}{s}$ $= 5\cfrac{m}{s^2}$ = 5 m/s² (si votre accélération est constante).
$\vec{a} = \cfrac{\vec{\Delta v}}{\Delta t}$
Dans une simulation numérique, on connaît l'accélération à chaque instant (à chaque tick). Par exemple dans une chute libre, l'accélération est constante vers le bas. Avec l'accélération, on calcule la différence de vitesse et donc la nouvelle vitesse.
$\vec{\Delta v} = \vec{a} \cdot \Delta t$
$\vec{v'} = \vec{v} + \vec{\Delta v}$
Et puis le déplacement et donc la nouvelle position :
$\vec{\Delta x} = \vec{v'} \cdot \Delta t$
$\vec{x'} = \vec{x} + \vec{\Delta x}$
Voici un bel exemple de simulation numérique de chute libre !
...
y = 300.0
v = -5.00
g = 0.05
dt = 1
fini = 0
while fini == 0:
...
a = g # chute libre
v = v + a * dt
y = y + v * dt
...
pygame.draw.rect(ecran, rouge, [100, y, 10, 10])
...
Dans de vraies simulations, le paramètre dt est important pour la précision. Mais ici dt = 1. dt = 1 tick.
J'introduis de manière concise la notion de force avec quelques exemples. Pour une autre introduction aux forces, je vous conseille la vidéo sur la loi de Newton. Cette vidéo est la 4ème d'une série de 4 vidéos [1] [2] [3] [4] liées à ce sujet sur Clipedia. Les trois premières vidéos sont une introdution historique mais la 4ème entre dans le vif du sujet. Cliquez sur vidéos liées en dessous de la vidéo pour voir les vidéos 2 à 4. N'hésitez pas à mettre la vidéo en plein écran, à arrêter ou revenir en arrière si vous le voulez, ou même de regarder la vidéo en accéléré en cliquant sur le bouton vitesse du lecteur.
Dans le monde physique, ce qui crée des accélérations, ce sont des forces. Par exemple pour la chute libre, nous avons la force de pesanteur.
Un autre exemple est la force musculaire. Quand je pousse un objet il subit une accélération dans le même sens que ma force. Au plus l'objet est gros (masse élevée), au moins l'accélération est grande. Nous avons :
$\vec{a} = \cfrac{\vec{F}}{m}$ $\iff \vec{F} = m \vec{a}$
La masse est en kg, l'accélération en m/s². Les unités d'une force sont le Newton : $N = kg\cfrac{m}{s^2}$.
Si je pousse un objet de 1kg avec une force de 1N, il subira une accélération de 1m/s². Si je pousse un objet de 10kg avec une force de 1N, il ne subira qu'une accélération de 0.10 m/s².
Si un objet subit plusieurs forces, celles-ci s'additionne (vectoriellement !). Ainsi si deux personnnes poussent un objet de 1kg chacun avec force de 20N à ± 30° comme ceci :
L'objet subira une accélération horizontale d'uniquement $34.64\ m/s²$. On a :
Les composantes en y des deux forces s'annulent.
La chute libre est très pratique pour faire un saut dans un jeu.
L'accélération des corps sur la terre est la même pour tous ($a = g$), vu que $F = ma$ on a donc :
$F_g = m g$
F_chutelibre = m * g
Clique sur gravity-master-light-saber pour voir une chute libre – Clic droit pour un ralenti – Tu peux apercevoir la vitesse et l'accélération.
La direction est vers le bas. Dans pygame on aura donc une force $(0,\ m g)$ mais dans les exercices de physique où l'axe y est vers le haut on aura sûrement $(0,\ - m g)$.
Plus d'infos sur l'électricité dans la série de 6 vidéos sur clipedia !
$F_G = G \cfrac{m_1 m_2}{d^2}$
F_gravite = G * m1 * m2 / d ** 2
La loi de gravitation universelle dit que la force est inversément proportionnelle au carré de la distance. La direction est évidemment attractive.
Clique sur la terre pour voir la force de Newton en action – Clic droit pour un ralenti.
Vectoriellement, vu que la force est attractive, on note :
$\vec{F_G} = G \cfrac{m_1 m_2}{d^2} \ \vec{1_d}$
Où $\vec{1_d}$ est le vecteur de direction par rapport à l'autre planète.
Pour savoir la valeur de $G$ dans la vraie vie, regardez sur wikipedia.
Dans l'approximation où la distance ne change pas lorsqu'on fait une chute libre. Nous retournons à $F = mg$. Essaie de trouver le lien entre $g$ et $G$ !
La loi de coulomb est une loi qui dicte l'attraction de charges électriques. La formule est la même que la loi d'attraction (les masses sont des charges et la constante change) sauf qu'ici les charges peuvent être négatives ! Ce qui fait une répulsion.
$\vec{F_E} = -\ k_C \cfrac{q_1 q_2}{d^2} \ \vec{1_d}$
F_electricite = - kC * q1 * q2 / d ** 2
La constante est ici la constante de coulomb.
Plus d'infos sur cette équation dans la série de 6 vidéos sur clipedia !
$\vec{F_r} = -\ k\ \vec{x}$
F_ressort = - k * x
Clique sur la pierre pour voir le pouvoir du ressort – Clic droit pour un ralenti.
Le x apparaîssant ici est le déplacement depuis la position de repos. Autrement dit, le x représente l'élongation.
$k$ est le coefficient de rappel du ressort. Plus il est grand, plus les mouvements seront forts !
Un ressort est un objet qui a une position de repos (disons 5cm). Quand son élongation est de 5cm. La force est nulle.
S'il est en 6cm, il est étiré de +1cm (1cm vers la droite) et emet une force disons de −1N (1N vers la gauche). S'il est étiré de 4cm, il est étiré de −1cm (1cm vers la gauche) et emet une force de −1N (1N vers la droite).
Le ressort émet donc une force opposée et proportionnelle au déplacement par rapport au point de repos.
Nous avons donc une force opposée à l'élongation, la force fera en sorte de rappeler la masse vers la position de repos. On appelle donc cette force, force de rappel.
En 1D, le x est réel qui peut être positif ou négatif, en 2D/3D, $\vec{x}$ est un vecteur.Clique sur la pierre ci dessous pour voir un déplacement 2D.
Le x peut aussi être un angle, comme dans l'exemple suivant :
Notre ressort oscille à jamais avec l'équation prise telle quelle.
Afin de ralentir et stabiliser le mouvement, une force de frottement linéaire est souvent ajoutée.
$\vec{F_f} = -\ \alpha\ \vec{v}$
F_frottement = - alpha * v
Clique sur le python pour observer un angle variant comme un ressort avec frottement linéaire.
La direction est contre (opposée) à la vitesse et proportionnelle (linéaire) à la vitesse. Ainsi, au repos (v = 0), la force est nulle.
$\alpha$ est le coefficient de frottement.
Le frottement de l'air est très complexe. Dans certains cas il peut être représenté par une force proportionnel au carré de la vitesse.
$F_a = c\ v^2$
F_air = c * v ** 2
La direction est également opposé à la vitesse.
$\vec{F_a} = - \ c\ v^2 \ \vec{1_v}$
Attention à la précision, à haute vitesse votre simulation ne risque pas de se passer très bien.
Dans la vraie vie, calculer $c$ est un processus complexe, il dépend fortement de la surface touchant l'air dans la direction du mouvement.