我的三次贝塞尔函数由[0.1,0.8,0.2,1] where [x1,y1,x2,y2]定义。
我在1200ms的时间内旋转元素720度。如何计算每60度的t?也就是说,当对象已经变成60, 120, 180, 240, 300, 360, 420, 480, 540, 600, 660, 720度时,我需要触发JavaScript事件。
如果我没记错的话,我需要得到每个x的值,其中y是(60/720), (60/720)*2, (60/720)*3, (60/720)*4, (60/720)*5, (60/720)*6, (60/720)*7, (60/720)*8, (60/720)*9, (60/720)*10, (60/720)*11, (60/720)*12,然后乘以x*duration (1200ms)。
我已经研究了http://blog.greweb.fr/2012/02/bezier-curve-based-easing-functions-from-concept-to-implementation/和https://github.com/arian/cubic-bezier实现。
如果到目前为止一切都是正确的,我如何获得y的x值?
发布于 2013-02-09 05:40:01
首先,您拥有的不是Bezier样条线,而是easing curve:三次Bezier样条线的特例,起点在(0.0,0.0),终点在(1.0,1.0),用于生成动画。
如果使用相等的时间间隔而不是相等的角度旋转间隔,则动画看起来会更好。t本质上是一个时间参数,因此曲线由下式给出
y(t) = 3*(1-t)^2*t*y1 + 3*(1-t)*t^2*y2 + t^3.其中,t属于区间[0.0,1.0]。
那么实际的角度将是
α(t) = 720 * y(T/1200)
= 720 * (2.4*(1-T/1200)^2*(T/1200) + 3*(1-T/1200)*(T/1200)^2 + (/1200)^3)其中T是以毫秒为单位的时间。
https://stackoverflow.com/questions/14464955
复制相似问题