易于运动,编程补间,c++

Ease of Motion, Programming Tweening, c++

补间是一个视频编辑术语,用于描述运动的轻松程度。例如,使用电梯时,电梯不会全速运行,而是在到达所需楼层时完全停止。它知道自己在哪一层,要去哪一层,以及到达那里需要多长时间。然后它使用该数据来平滑其运动。

我希望能够使用补间动画为我的项目编写这种流畅的动作。

如何执行此操作的方法在 http://robertpenner.com/easing/penner_chapter7_tweening.pdf

中列出

具体看pg207-211

本指南解释了补间是什么,然后显示了 Action Script 中的代码。老实说,我觉得有点愚蠢,因为我尝试使用提供的示例,但我似乎无法用其他语言复制它,例如 c++、java、javascript 或 lua.

我不想使用包或插件来编写补间代码,我想学习如何实际编写补间功能代码。因此,如果任何具有更好理解能力或编程技能的人认为他们理解,那么我将非常感谢您的解释。

示例动作脚本函数...

Math.easeInQuad = function (t, b, c, d) {
    return c*(t/=d)*t + b;
};

Math.easeOutQuad = function (t, b, c, d) {
    return -c * (t/=d)*(t-2) + b;
};

Math.easeInOutQuad = function (t, b, c, d) {
    if ((t/=d/2) < 1) 
        return c/2*t*t + b;
    return -c/2 * ((--t)*(t-2) - 1) + b;
};

AS3 中的适当补间函数接受 Number 的 6 个参数,最后两个参数默认为 0。它应按如下方式解释参数:

  • 第一个参数是主要参数,它填充了从 0 到补间持续时间的值;
  • 第二个参数是当第一个参数为零时您尝试补间的参数值;
  • 第三个参数是补间参数预期分配的值的区间大小;
  • 第四个参数是用户提供的任何单位的持续时间,因此是数字而不是整数;
  • 第五和第六个参数是可选的,在 AS3 内置补间库中不使用,但如果在其他地方习惯使用,它们可用于修改函数内部完成的插值。

预期结果是 second(second+third) 参数之间的值,或者它们的规范名称 t, b, c, d, a, pbb+c 之间。

您可以使用像这样的简单算法绘制函数图:

function graph(f:Function,w:Number,h:Number):Shape {
    // returns a shape with black on white graph drawn within a rectangle of given dimensions
    var s:Shape=new Shape();
    s.graphics.lineStyle(0); // black
    s.graphics.moveTo(0,h); // lower left corner
    for (var i:int=0;i<w;i++) {
         s.graphics.lineTo(i,f(i,h,-1*h,w));
    }
    return s;
}

说到 C++,例如 easeInQuad 应该这样编程(如果我没有弄乱 C++ 语法):

double easeInQuad(double t, double b, double c, double d) {
    double td=t/d;
    return b+c*td*td;
}