У меня есть 3 значения, которые определяют движение объекта: velocity
, acceleration
и maxVelocity
. У меня также есть значение distance
, которое определяет, насколько они близки к их цели (в основном X). Этот код выполняется каждый кадр, чтобы определить фактическое движение на основе 3-х значений:Как рассчитать ускорение, необходимое на основе существующих правил ускорения/скорости
var velocityDelta = (Math.max(Math.min(velocity + (acceleration * 0.016), maxVelocity), -maxVelocity) - velocity)/2;
velocity += velocityDelta;
var delta = velocity*0.016;
velocity += velocityDelta;
distance -= delta;
Если velocityDelta
немного запутанным это в основном это:
velocityDelta = velocity + (acceleration * 0.016);
if (velocityDelta > maxVelocity) velocityDelta = maxVelocity;
else if (velocityDelta < -maxVelocity) velocityDelta = -maxVelocity;
velocityDelta = (velocityDelta - velocity)/2;
Теперь, если вы можете только изменить значение от acceleration
, есть ли способ рассчитать, какое ускорение вам понадобится, чтобы гарантировать, что distance
будет в точности равным 0? Значение во время одного из кадров, в которых выполняется вышеуказанный код, distance - delta == 0
. Так предположим, что код выглядит следующим образом:
var distance = 300.5;
var velocity = 125.86;
var maxVelocity = 300;
while (distance != 0) {
acceleration = ?
var velocityDelta = (Math.max(Math.min(velocity + (acceleration * 0.016), maxVelocity), -maxVelocity) - velocity)/2;
velocity += velocityDelta;
var delta = velocity*0.016;
velocity += velocityDelta;
distance -= delta;
}
Какое значение вы бы положить в acceleration
, чтобы гарантировать, что цикл не работает навсегда? Предполагая, что расстояние/скорость/макс может быть любым числом, которое вы не можете изменить.