La notion force est centrale en physique, qu'est-ce qu'une force ?
Une force permet de modéliser l'action qu'exerce un objet A sur un objet B. Prenons tout de suite un exemple : l'action qu'exerce la Terre (planète) sur un livre est une force que l'on appelle le poids du livre. Pour qu'il y ait force, il faut obligatoirement 2 "objets" : un objet qui exerce la force (la Terre dans notre exemple) et un objet qui "subit" la force (le livre dans notre exemple). Une force est modélisée par un vecteur, on parle de vecteur force $\vec{F}$.
Autre définition pour une force : c'est une action mécanique capable d'imposer une modification du vecteur vitesse.
Nous avons vu, dans l'activité précédente, une autre grandeur qui provoque une modification du vecteur vitesse : le vecteur accélération. Il existe donc un lien entre la notion de force et la notion d'accélération. Cette relation est décrite dans une loi fondamentale de la physique : la seconde loi de Newton.
Soit un mobile M de masse m, M subit une force $\vec{F}$. Si $\vec{a}$ est l'accélération de M, la deuxième loi de Newton nous dit que :
$\vec{F}=m.\vec{a}$
avec $||\vec{F}||$ en Newton, $||\vec{a}||$ en mètre par seconde par seconde et m en Kg
Que se passe-t-il si le mobile M est soumis simultanément à plusieurs forces ($\vec{F1}, \vec{F2}, \vec{F3},...$) ?
Il faut faire la somme des forces : $\sum\vec{F}=\vec{F1}+\vec{F2}+\vec{F3}$
la seconde loi de Newton s'écrit alors :
$\sum\vec{F}=m.\vec{a}$
Passons maintenant à l'intégration de cette deuxième loi de Newton dans notre objet "Mobile".
Nous allons définir un nouveau vecteur "sommeF" qui correspondra à la somme des forces s'exerçant sur le mobile.
La méthode "ajoutForce" permettra d'ajouter une force à "sommeF". Cette méthode prendra pour paramètre la force à ajouter (un vecteur).
Saisissez, analysez et testez ce code
mobile.js
Mobile=function () {
this.OM = new createVector(width/2,height/2);
this.dOM = new createVector();
this.v = new createVector();
this.dv = new createVector();
this.a = new createVector();
//création du vecteur sommeF
this.sommeF = new createVector();
this.affiche=function(){
fill(0);
ellipse(this.OM.x,this.OM.y,20,20);
}
this.update=function(dt){
this.dv = p5.Vector.mult(this.a,dt);
this.v.add(this.dv);
this.dOM = p5.Vector.mult(this.v,dt);
this.OM.add(this.dOM);
//fin des calculs, remise à zéro de la somme des forces
this.sommeF.mult(0);
}
this.ajoutForce=function(F){
this.sommeF.add(F);
}
}
script.js
var mob;
function setup(){
createCanvas(200,200);
mob=new Mobile();
}
function draw(){
var dt=0;
background(255);
if (frameRate()>0){
dt=1/frameRate();
}
F=createVector(10,0);
mob.ajoutForce(F);
mob.update(dt);
mob.affiche();
}
Nous avons bien ajouté la méthode "ajoutForce". À chaque fois que cette méthode est exécutée depuis le programme principal ("script.js"), une force est ajoutée au vecteur "sommeF".
Une ligne de la méthode "update" doit particulièrement attirer votre attention :
sommeF.mult(0);
Cette ligne est équivalente à un $\sum\vec{F}=\vec{0}$. Cette ligne permet de "remettre à zéro" le vecteur "sommeF", pourquoi doit-on remettre le vecteur "sommeF" à zéro ?
La somme des forces est calculée à chaque image (chaque exécution de la fonction "draw") puisqu' à chaque nouvelle exécution, nous rencontrons la ligne "mob.ajoutForce(F);". Si rien n'était fait nous aurions :
ce qui évidemment, n'est pas le but recherché (nous voulons avoir $\sum\vec{F}=\vec{F}$ à chaque image).
Voilà pourquoi, à chaque image, dans la méthode "update", nous remettons "les compteurs à zéro" avec le "sommeF.mult(0);".
Cette façon de faire a pour conséquence que les appels de la méthode "ajoutForce" devront forcement être fait avant d'exécuter la méthode "update".
L'ajout des forces n'a pour l'instant aucune conséquence sur le mobile M, il nous fait maintenant implémenter la seconde loi de Newton.
Saisissez, analysez et testez ce code
mobile.js
Mobile=function () {
this.OM = new createVector(width/2,height/2);
this.dOM = new createVector();
this.v = new createVector();
this.dv = new createVector();
this.a = new createVector();
//création du vecteur sommeF
this.sommeF = new createVector();
//la variable m correspond à la masse du mobile
this.m=1;
this.affiche=function(){
fill(0);
ellipse(this.OM.x,this.OM.y,20,20);
}
this.update=function(dt){
//calcul de l'accélération grâce à la 2de loi de Newton
this.a=p5.Vector.mult(this.sommeF,1/this.m);
this.dv = p5.Vector.mult(this.a,dt);
this.v.add(this.dv);
this.dOM = p5.Vector.mult(this.v,dt);
this.OM.add(this.dOM);
//fin des calculs, remise à zéro de la somme des forces
this.sommeF.mult(0);
}
this.ajoutForce=function(F){
this.sommeF.add(F);
}
}
script.js
var mob;
function setup(){
createCanvas(200,200);
mob=new Mobile();
}
function draw(){
var dt=0;
background(255);
if (frameRate()>0){
dt=1/frameRate();
}
F=createVector(10,0);
mob.ajoutForce(F);
mob.update(dt);
mob.affiche();
}
Nous avons introduit un nouvel attribut m qui correspond à la masse de l'objet
La ligne :
a=p5.Vector.mult(sommeF,1/m);
permet d'avoir $\vec{a}=\frac{1}{m}.\sum\vec{F}$ qui est bien sûr équivalent à un $\vec{a}=\frac{\sum\vec{F}}{m}$ (qui découle de la seconde loi de Newton $\sum\vec{F}=m.\vec{a}$)
Vous allez écrire la version "définitive" de l'objet Mobile.
Apporter les modifications nécessaires pour que :
La "correction" de ce "À faire vous-même" est donnée au début de l'activité suivante.