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();
  • Вопрос задан
  • 109 просмотров
Решения вопроса 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
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽
24 янв. 2021, в 19:14
500 руб./за проект
24 янв. 2021, в 18:02
3000 руб./за проект