我的目标是用 JavaScript 编写一个动画来执行缓入式贝塞尔曲线动画(例如在http://cubic-bezier.com/#.42,0,.58,1中)
我想出了以下脚本来计算给定“x”值(时间)的 y 值:
function CalculateBezierPoint(t, p0, p1, p2, p3) {
var y = ((1-t)*(1-t)*(1-t)*p0) + (3*(1-t)*(1-t)*t*p1) + (3*(1-t)*t*t*p2) + (t*t*t*p3);
return y;
}
使用Wikipedia中的显式公式:
演示 - https://codepen.io/anon/pen/QpRzBg
但是,打印语句显示 Y 值在上升之前下降,而它应该只上升:
0.42
0.3228427793606603
0.3119941308275725
0.3025864871426283
0.29458762995005683
0.2879653408940873
0.28268740161894895
0.27872159376887096
0.27603569898808256
0.27459749892081287
0.2743747752112911
0.2753353095037466
0.27744688344240837
0.28067727867150566
0.2849942768352678
0.29675920854370297
0.3041427053768346
0.3124839317215477
0.3217506690862967
0.33191069937460593
0.34293180410763435
0.35478176492961133
我确实设法找到了似乎有效的其他人的代码,这是输出:
0
0.009480343767040133
0.0246451904411195
0.03199616010201068
0.040680303103589804
0.05080871722437687
0.062492500242891866
0.07584274993765482
0.0909705640871857
0.10798704047000454
0.12700327686463134
0.14813037104958607
0.17147942080338874
0.19716152390455938
0.225287778131618
0.25596928126308455
0.28931713107747903
0.3254424253533215
0.36445626186913194
0.4064697384034303
0.4515939527347367
0.499940002641571
演示 - https://codepen.io/anon/pen/evabrr
两个演示都使用相同的输入:p0 = .42, p1 = 0, p2 = .58, p3 = 1
我不知道为什么我的尝试失败了,而且我找到的代码有效。我是否错误地执行了公式?我选择了错误的公式吗?还有什么?