Помогите сформулировать кубическое уравнение ослабления - PullRequest
3 голосов
/ 08 сентября 2011

У меня есть следующий фрагмент кода

int steps = 10;
for (int i = 0; i <= steps; i++) {
    float t = i / float(steps);
    console.log( "t  " + t );
}

, который выводит числа в линейном порядке, как это {0, 0,1, 0,2, ..., 0,9, 1,0} Я хотел бы применить кубический(внутри или снаружи) уравнение ослабления, чтобы выходные числа постепенно увеличивались или уменьшалисьожидается

float b = 0;
float c = 1;
float d = 1;
for (int i = 0; i <= steps; i++) {
    float t = i / float(steps);

    t /= d;

    float e = c * t * t * t + b;

    console.log( "e  " + e );
    //console.log( "t  " + t );
}

Ответы [ 2 ]

4 голосов
/ 08 сентября 2011

кубическая функция EasIn

/**
 * @param {Number} t The current time
 * @param {Number} b The start value
 * @param {Number} c The change in value
 * @param {Number} d The duration time
 */ 
function easeInCubic(t, b, c, d) {
   t /= d;
   return c*t*t*t + b;
}

EaseOut Cubic Function

/**
 * @see {easeInCubic}
 */
function easeOutCubic(t, b, c, d) {
   t /= d;
   t--;
   return c*(t*t*t + 1) + b;
}

Здесь вы можете найти другие полезные уравнения: http://www.gizma.com/easing/#cub1

Поместите этот код через некоторое время, как раньше, и у вас будут выходные кубические убывающие числа.

1 голос
/ 08 сентября 2011

Вы можете использовать код из плагина jQuery Easing: http://gsgd.co.uk/sandbox/jquery/easing/

/*
*  t: current time
*  b: begInnIng value
*  c: change In value
*  d: duration
*/

easeInCubic: function (x, t, b, c, d) {
    return c*(t/=d)*t*t + b;
},
easeOutCubic: function (x, t, b, c, d) {
    return c*((t=t/d-1)*t*t + 1) + b;
},
easeInOutCubic: function (x, t, b, c, d) {
    if ((t/=d/2) < 1) return c/2*t*t*t + b;
    return c/2*((t-=2)*t*t + 2) + b;
}
...