Задать вопрос
DmitryDDS
@DmitryDDS
Человек.

Почему угасает энергия в моделировании «гравитации» в JS?

У меня есть код, который моделирует псевдо гравитацию(притяжение к земле) и отскок шара от поверхности.
По идее шар не должен терять скорость по оси X и высоту по оси Y, но шар постоянно теряет, медленно, но теряет высоту, пока не застрянет.

Я не понимаю куда могут уходить значения высоты...

Вот код:

const canvas = document.getElementById("canvas");
      const ctx    = canvas.getContext("2d");

      function world(){
         var xp = 11;
         var yp = 250;
         var g  = 0.05;
         var sx = 3;
         var sy = 0;
         var sz = 0;
         setInterval(function(){
            if(xp >= 490) sx = -sx;
            if(xp <= 10)  sx = -sx;
            if(yp >= 490) sy = -sy;
            if(yp <= 10)  sy = -sy;
            sy += g;
            xp += sx;
            yp += sy;
            draw(xp, yp);
         }, 10)
      }
      function draw(x,y){
         ctx.strokeStyle='#000';
         ctx.fillStyle='#fff';
         ctx.clearRect(0, 0, 500, 500);
         ctx.beginPath();
         ctx.arc(x, y, 10, 0, Math.PI * 2)
         ctx.stroke();
         ctx.fill();
      }
      world();
  • Вопрос задан
  • 123 просмотра
Подписаться 1 Простой 7 комментариев
Решения вопроса 1
@ksnk
В момент удара по горизонтальной поверхности - sy - максимальна, после чего она инвертируется. И в этот же момент уменьшается. Тоесть каждый удар по плоскости, максимальная скорость убегания становится меньше на G. Просто выведи скорость сразу после инвертирования sy и все сам увидишь
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
var g = 0.05;
console.log(g + g == 0.1); //true
console.log(g + g + g == 0.15); //false
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы