Функции ослабления для моей анимации не работают

Я не лучший в математике, и я пытаюсь угадать, как реализовать это для моей анимации. Но в настоящее время это не работает, и я считаю, что я неправильно понял, как сделать мою функцию замедления для моей анимации.

У меня есть объект, который должен представлять плоскость, на моем холсте которого есть следующие свойства:

Current Velocity    = obj.velocity
Braking Distance    = obj.stopDist
Current Position    = obj.posX & obj.posY
Destination         = obj.destX & obj.destY

Затем я включил математические расчеты, чтобы попытаться посадить самолет на ВПП с функцией замедления, чтобы он выглядел наполовину прилично визуально, даже если это не физика реального мира, подобная этой:

function ease(easeDelta,accelerateBool){
    if(accelerateBool){
          // accelerating
          return (easeDelta * easeDelta * easeDelta);
    } else {
         //decelerating
          return ((easeDelta--) * easeDelta * easeDelta + 1);
        }

}
function InRange(delta, minValue, maxValue){
     var range        = (maxValue - minValue);
     var valueInRange = (range * delta); 
     var finalValue   = (valueInRange + minValue);
     return finalValue;
}

function landing(){ //part of animation loop
 var delta        = new Date().getTime() - obj.timer, //ms since previous frame         
     vectorX      = obj.destX - obj.posX,
     vectorY      = obj.destY - obj.posY,
     normal       = Math.sqrt(vectorX*vectorX + vectorY*vectorY), //distance to destination
     targetSpeed  = 20,
     easeDelta    = (normal / obj.stopDist),
     newSpeed     = InRange(ease(easeDelta,false), obj.velocity, targetSpeed),
     distance     = delta * newSpeed;

     obj.posX    += (distance * vectorX);
     obj.posY    += (distance * vectorY);
     obj.timer    = new Date().getTime(); //ready for next frame    
}

Проблема в том, что самолет не замедляется, поскольку он идет по взлетно-посадочной полосе в направлении пункта назначения. Это просто очень медленно.

Я перепутал мои математические вычисления с тем, как работают функции замедления?

1 ответ

Решение

Вот несколько чрезвычайно простых уравнений, написанных на рисунке, которые могут оказаться полезными.

  // accelerating from zero velocity
  function easeIn(t)
  {
    return t*t
  }

  // decelerating to zero velocity
  function easeOut(t) 
  { 
    return t*(2-t) 
  }

чтобы вы могли использовать их так:

function ease(easeDelta,accelerateBool){
    if(accelerateBool){
          // accelerating
          return (easeDelta * easeDelta);
    } else {
         //decelerating
          return ((easeDelta*(easeDelta - 2)));
        }

}
Другие вопросы по тегам