Class : Gravity


L'idée est de simuler la chute d'un objet.

La chute ne doit pas être linéaire mais accélérée.

Physique




Équation

A chaque itération, il suffit d'appliquer les équations suivantes :

    gravitySpeed += gravity;

    y += gravitySpeed;


Avec les valeurs de simulation suivantes, on voit clairement que durant :

  •  les dix premières itérations l'objet passe de la position 1 à 6 
  •  les dix itérations suivantes l'objet passe de la position 6  à 22
  •  de l'itération 60 à 70 l'objet passe de la position de 183 à 249


                    Frame 1 : y = 1 (valeur tronquée)
(index):186 Frame 2 : y = 1
(index):186 Frame 3 : y = 1
(index):186 Frame 4 : y = 1
(index):186 Frame 5 : y = 2
(index):186 Frame 6 : y = 3
(index):186 Frame 7 : y = 3
(index):186 Frame 8 : y = 4
(index):186 Frame 9 : y = 5
(index):186 Frame 10 : y = 6
(index):186 Frame 11 : y = 7
(index):186 Frame 12 : y = 8
(index):186 Frame 13 : y = 10
(index):186 Frame 14 : y = 11
(index):186 Frame 15 : y = 12
(index):186 Frame 16 : y = 14
(index):186 Frame 17 : y = 16
(index):186 Frame 18 : y = 18
(index):186 Frame 19 : y = 20
(index):186 Frame 20 : y = 22
...
(index): 186Frame 60 : y = 183
(index):186 Frame 61 : y = 190
(index):186 Frame 62 : y = 196
(index):186 Frame 63 : y = 202
(index):186 Frame 64 : y = 208
(index):186 Frame 65 : y = 215
(index):186 Frame 66 : y = 222
(index):186 Frame 67 : y = 228
(index):186 Frame 68 : y = 235
(index):186 Frame 69 : y = 242
(index):186 Frame 70 : y = 249

L'objet chute :

  • durant les dix premières itérations l'objet chute de ( 6 - 1) 5px, 
  • de l'itération 60, la chute sera de (249 - 183 ) 66px 
  • et à partir de l'itération 1000, l'objet chute à une très grande vitesse (or, nous savons qu'il existe une vitesse limite de chute qui est du au freinage des frottement)


Code


class GravityBloc extends AnimatedBloc {

  constructor(elt, {
    speed
  }) {
    super(elt, {
      speed
    });

    this.gravity = 0.1;
    this.gravitySpeed = 0;
  }

  static construct(elt, {
    speed = 0
  } = {}) {

    return new GravityBloc( elt, speed );
  }


  update() {

    super.update();
    
    this.gravitySpeed +=this.gravity;
    this.y += this.gravitySpeed;

  }

}