易于运动,编程补间,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, p
在 b
和 b+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;
}
补间是一个视频编辑术语,用于描述运动的轻松程度。例如,使用电梯时,电梯不会全速运行,而是在到达所需楼层时完全停止。它知道自己在哪一层,要去哪一层,以及到达那里需要多长时间。然后它使用该数据来平滑其运动。
我希望能够使用补间动画为我的项目编写这种流畅的动作。
如何执行此操作的方法在 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, p
在 b
和 b+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;
}