贝赛尔曲线是一种在计算机图形运算中常见的平滑曲线,通常在使用中我们要通过一个或者多个控制点来产生一个贝赛尔曲线。对于这种无穷无尽的曲线的计算公式,死记硬背是无意义的,理解它才能以不变尽万变,本文简单介绍如何推导公式并运算得到一个贝赛尔曲线的运动轨迹。
我们先看一个特殊的直线的例子, 假设一直线经过(X0,Y0),(X1,Y1),总时间为1,则我们可以计算出任意时刻的位置为Xt = (X1 – X0)t + X0, Yt= (Y1 – Y0)t + Y0.Y的计算方法和X一样,所以下面以X为例做讨论。
即任意位置的X位置为Xt= (1-t)*X0 + X1*t
现在我们来看一下加入一个控制点的贝赛尔曲线:
如图所示,任意点B的位置其实就是线段Q0Q1的t时刻的位置,而Q0与Q1又分别是P0P1和P1P2的t时刻的位置,所以:
Q0 = (1-t)P0+ P1t; Q1 = (1-t) P1 + P2t; B = (1-t)Q0+ Q1t
因此:B = (1-t)((1-t)P0 + P1t) + ((1-t)P1 + P2t)t= (1-t) * (1-t) * P0 + (1-t) * t * P1 + (1-t) * t *P1+ P2 * t * t = (1-t)2P0 + 2t(1-t)P1+ t2P2
以此类推,当有2个控制点时:
如上图所示:B为R0R1在t时刻的位置,R0为Q0Q1在t时刻的位置,R1为Q1Q2在t时刻的位置,
又有Q0为P0P1在t时刻的位置,Q1为P1P2在t时刻的位置,Q2为P2P3在t时刻的位置。
不难得出:
Q0 = (1-t)P0+ tP1; Q1 = (1-t)P1 + tP2; Q2= (1-1)P2 + tP2;
R0 = (1-t)Q0+ tQ1; R1 = (1-t)Q1 + tQ2;
B = (1-t)R0+ tR1;
通过简单的代数可以得出B= (1-t)3P0 + 3(1-t)2tP1 + 3(1-t)t2P2+ t3P3;
参考 wikipedia: http://en.wikipedia.org/wiki/B%C3%A9zier_curve