After Effects 中的 linear() 函数有什么编程/数学术语吗?
is there a programming / math term for what the linear() function does in After Effects?
Adobe After Effects(动画/合成应用程序)有一种基于 JavaScript 的脚本语言(表达式),它附带了一堆构建在 JS 之上的特定于 After Effects 的函数。函数 linear()
就是其中之一。它考虑了一个对象 属性 的动画变化(例如,滑块的 X 位置)并将其链接到另一个 属性 (例如,场景中某个其他对象的旋转),以便第一个动画 属性 控制/动画第二个 属性.
如果该解释令人困惑,请参阅此视频中的 11:33:
https://www.youtube.com/watch?v=gK1Ejt7qND0&t=693s
linear()
函数调用如下所示:
linear(ref, refStart, refEnd, outStart, outEnd);
我不知道实际的内部参数名称是什么,但这就是他们所做的:
ref
== "controller" 属性(在我之前的示例中,对象的 X 位置)。通常是动画,随时间变化。
refStart
/ refEnd
== ref 的下限和上限 属性
outStart
/ outEnd
==目标的下界和上界属性(在我前面的例子中,另一个物体的旋转)
这个函数的作用是否有通用的编程术语?还是数学术语?据我所知,它涉及 "interpolation," 也许是线性插值,但我不清楚。
是否有包含与此函数等效的通用编程/数学库? After Effects 也有 linear()
的简化版本,称为 ease()
、easeIn()
和 easeOut()
。据我所知,这些在编程中可能被称为 "easing functions",但不确定。
奖励:我尝试从头开始对 AE 的 linear() 进行逆向工程。非常准系统,不做任何类型检查或错误,但在我的 AE 测试中它似乎工作相同:
function fauxLinear( ref, refStart, refEnd, outStart, outEnd ) {
// constrain refTemp to range of refStart to refEnd
let refTemp = 0;
const refMin = Math.min( refStart, refEnd );
const refMax = Math.max( refStart, refEnd );
refTemp = (ref < refMin) ? refMin :
(ref > refMax) ? refMax : ref;
// calculate input range and ref proportion
const refRange = Math.abs( refStart - refEnd ) || .001; // avoid dbz
const refRangeTarget = Math.abs( refMin - refTemp );
const refProportion = refRangeTarget / refRange;
// calculations for final output
let outRange = [], outSlope = [], finalVal = [];
const loopLen = ( Array.isArray( outStart ) ) ? outStart.length : 1;
if (loopLen == 1) { outStart = [outStart], outEnd = [outEnd]; }
for (let i = 0; i < loopLen; i++) {
outRange[i] = Math.abs( outStart[i] - outEnd[i] );
outSlope[i] = ( outStart[i] <= outEnd[i] ) ? 1 : -1;
finalVal[i] = ( outSlope[i] * (outRange[i] * refProportion) + outStart[i] );
}
return ( loopLen == 1 ) ? finalVal[0] : finalVal;
}
在许多其他事物中,它是一条直线,非常简单,大声笑。正方形是 4x 线性的,我想你可以这么说。在与声音 (EQ) 一起使用的工具中,它在 0hz 到 20k 之间是线性的。你在做什么听起来很难。如果 a 和 b 是直线,它们会在您画好的球处相遇。球可以向左、向右、向上移动以及您在功能中拥有的那些。这让我苦苦思索。还剩什么?数学术语也是 linear 所以你是对的。我觉得
https://www.geeksforgeeks.org/python-linear-programming-in-pulp/
我偶然发现了这个!
抱歉,顺便说一句,我不知道如何让它看起来更好。
是的,这是一个 Linear Interpolation 某些语言具有 lerp()
函数或等效函数的函数。但是 javascript Math class 中似乎没有任何内容。
Adobe After Effects(动画/合成应用程序)有一种基于 JavaScript 的脚本语言(表达式),它附带了一堆构建在 JS 之上的特定于 After Effects 的函数。函数 linear()
就是其中之一。它考虑了一个对象 属性 的动画变化(例如,滑块的 X 位置)并将其链接到另一个 属性 (例如,场景中某个其他对象的旋转),以便第一个动画 属性 控制/动画第二个 属性.
如果该解释令人困惑,请参阅此视频中的 11:33: https://www.youtube.com/watch?v=gK1Ejt7qND0&t=693s
linear()
函数调用如下所示:
linear(ref, refStart, refEnd, outStart, outEnd);
我不知道实际的内部参数名称是什么,但这就是他们所做的:
ref
== "controller" 属性(在我之前的示例中,对象的 X 位置)。通常是动画,随时间变化。
refStart
/ refEnd
== ref 的下限和上限 属性
outStart
/ outEnd
==目标的下界和上界属性(在我前面的例子中,另一个物体的旋转)
这个函数的作用是否有通用的编程术语?还是数学术语?据我所知,它涉及 "interpolation," 也许是线性插值,但我不清楚。
是否有包含与此函数等效的通用编程/数学库? After Effects 也有 linear()
的简化版本,称为 ease()
、easeIn()
和 easeOut()
。据我所知,这些在编程中可能被称为 "easing functions",但不确定。
奖励:我尝试从头开始对 AE 的 linear() 进行逆向工程。非常准系统,不做任何类型检查或错误,但在我的 AE 测试中它似乎工作相同:
function fauxLinear( ref, refStart, refEnd, outStart, outEnd ) {
// constrain refTemp to range of refStart to refEnd
let refTemp = 0;
const refMin = Math.min( refStart, refEnd );
const refMax = Math.max( refStart, refEnd );
refTemp = (ref < refMin) ? refMin :
(ref > refMax) ? refMax : ref;
// calculate input range and ref proportion
const refRange = Math.abs( refStart - refEnd ) || .001; // avoid dbz
const refRangeTarget = Math.abs( refMin - refTemp );
const refProportion = refRangeTarget / refRange;
// calculations for final output
let outRange = [], outSlope = [], finalVal = [];
const loopLen = ( Array.isArray( outStart ) ) ? outStart.length : 1;
if (loopLen == 1) { outStart = [outStart], outEnd = [outEnd]; }
for (let i = 0; i < loopLen; i++) {
outRange[i] = Math.abs( outStart[i] - outEnd[i] );
outSlope[i] = ( outStart[i] <= outEnd[i] ) ? 1 : -1;
finalVal[i] = ( outSlope[i] * (outRange[i] * refProportion) + outStart[i] );
}
return ( loopLen == 1 ) ? finalVal[0] : finalVal;
}
在许多其他事物中,它是一条直线,非常简单,大声笑。正方形是 4x 线性的,我想你可以这么说。在与声音 (EQ) 一起使用的工具中,它在 0hz 到 20k 之间是线性的。你在做什么听起来很难。如果 a 和 b 是直线,它们会在您画好的球处相遇。球可以向左、向右、向上移动以及您在功能中拥有的那些。这让我苦苦思索。还剩什么?数学术语也是 linear 所以你是对的。我觉得
https://www.geeksforgeeks.org/python-linear-programming-in-pulp/
我偶然发现了这个!
抱歉,顺便说一句,我不知道如何让它看起来更好。
是的,这是一个 Linear Interpolation 某些语言具有 lerp()
函数或等效函数的函数。但是 javascript Math class 中似乎没有任何内容。