贝塞尔曲线专题

514 阅读2分钟

在线cubic-bezier

三次贝塞尔曲线方程t=x取值于[0,1]

B(t) = ( 1 - t )3p0 + 3t( 1 - t )2p1 + 3t2( 1 - t )p2 + t3p3

需要注意的是,这是根据t绘制贝塞尔曲线的方程,将对应点的x坐标和y坐标带入公式得到两个公式,两个公式的意义是 根据所给t,将要描绘的贝塞尔曲线上的点的坐标,

cubic-bezier: 模型化贝塞尔曲线的方式

cubic-bezier上的图像是以x轴为时间线(时间),y轴为总量(路程)的曲线图像,但,x轴的时间线和t并不是一回事,x轴的时间线是实际动画运行的时间线,而t是绘制cubic-bezier图像时的时间线

为什么控制点 p1、p3 的x轴取值为大于等于 0 且小于等于 1

因为x轴是量化的时间线,是当前时间在总时间内的占比

为什么控制点 p1、p3 的y轴取值可以大于 1 也可以小于 0

因为y轴是变化总量(sum of change),时间不能倒退,但是总量可以减少(小于 0 ),也可以超额完成(大于 1 )

三次贝塞尔曲线在动画中的应用,根据t值求y

采用二分法,比如,我想求时间r点所走的路程
规则贝塞尔块四点: p0(0, 0)/p1控制点/p2(1, 1)/p3控制点

for(let t = 0; t<= 1 ; t+= 0.5){
    calculateBezier(t)  // 将t和四个点的x坐标带入方程,得到的就是t时,要绘制的贝塞尔曲线的x点的坐标
}
// 得到三个点的坐标,判断r在哪一段中,继续二分, 例如,r在第二段中
for(let t = 0.5; t<= 1 ; t+= 0.25){
    calculateBezier(t)
}
...
直到r与某一点x坐标的比值小于阈值时,对应的y坐标就是结果就可以近似认为为结果了