Ведение журнала помогает понять странные колебания.
Начните с этого (к которому оно приходит примерно через 65 кадров):
vel: -1.365234375
y: 0.26953125
В следующем кадре мяч падает на пол.и значение vel переворачивается и делится пополам:
vel: 0.6826171875
y: 0
Далее шар перемещается вверх, а vel переключается на отрицательное значение:
vel: -0.3173828125
y: 0.6826171875
Далее шарик перемещается вниз и vel уменьшается еще немного:
vel: -1.3173828125
y: 0.365234375
Затем мяч падает на пол, и vel делится пополам и снова переворачивается:
vel: 0.65869140625
y: 0
Обратите внимание, что мы сейчас очень близки к тому, с чего начали, и продолжим этоТаким образом, нормализуя примерно до y = 1/3 и y = 2 / 3.
Если вы уберете эффект гравитации из оператора else и позволите гравитации влиять на каждый кадр, шарик установится в ноль.
Пример в p5js: https://editor.p5js.org/bcingle/sketches/hfVbE9YJf