贝塞尔曲线原理

这是一篇转载文章。Bézier curve(贝塞尔曲线)是应用于二维图形应用程序的数学曲线。 曲线定义:起始点、终止点(也称锚点)、控制点。通过调整控制点,贝塞尔曲线的形状会发生变化。 1962年,法国数学家Pierre Bézier第一个研究了这种矢量绘制曲线的方法,并给出了详细的计算公式,因此按照这样的公式绘制出来的曲线就用他的姓氏来命名,称为贝塞尔曲线。

1 抛物线三切线定理

\(P_0\)\(P_0^2\)\(P_2\)是一跳抛物线上顺序不同的三个点。过\(P_0\)\(P2\)的切线交于\(P_1\)。过\(P_0^2\)的切线交\(P_0 P_1\)\(P_2 P_1\)相交于\(P_0^1\)\(P_1^1\),则有如下比例成立:

\[\begin{equation} \frac{P_{0} P_{0}^{1}}{P_{0}^{1} P_{1}}=\frac{P_{1} P_{1}^{1}}{P_{1}^{1} P_{2}}=\frac{P_{0}^{1} P_{0}^{2}}{P_{0}^{2} P_{1}^{1}} \end{equation}\]

抛物线三切线定理示意图

此即为抛物线的三切线定理。

2 二次贝塞尔曲线

\(P_0\)\(P_2\)固定时,引入参数\(t\),令上述比例值为\(t:(1-t)\),即有:

\[\begin{equation} \begin{array}{l}{P_{0}^{1}=(1-t) P_{0}+t P_{1}} \\ {P_{1}^{1}=(1-t) P_{1}+t P_{2}} \\ {P_{0}^{2}=(1-t) P_{0}^{1}+t P_{1}^{1}}\end{array} \end{equation}\]

将第一,二个式子代入第三个有:

\[\begin{equation} P_{0}^{2}=(1-t)^{2} P_{0}+2 t(1-t) P_{1}+t^{2} P_{2} \end{equation}\]

\(t\)从0变到1时,\(P_0^2\)点经过的轨迹即为上图中的抛物线,也即为由三顶点\(P_0\), \(P_1\), \(P_2\)决定的一条二次贝塞尔曲线。也可以认为这条二次贝塞尔曲线是由两个前顶点\((P_0, P_1)\)以及两个后顶点\((P_1, P_2)\)决定的。

3 更高阶的贝塞尔曲线

类似于二次贝塞尔曲线的推导过程,我们可以推广到更高阶的贝塞尔曲线。

由四个控制点定义的三次Bezier曲线\(P_0^3\)可被定义为分别由\((P_0,P_1,P_2)\)\((P_1,P_2,P_3)\)确定的二条二次Bezier曲线的线性组合,由\((n+1)\)个控制点\(P_i(i=0,1,...,n)\)定义的n次Bezier曲线\(P_0^n\)可被定义为分别由前、后\(n\)个控制点定义的两条\((n-1)\)次Bezier曲线\(P_0^{n-1}\)\(P+0^{n-1}\)的线性组合:

\[\begin{equation} P_{0}^{n}=(1-t) P_{0}^{n-1}+t P_{1}^{n-1} \quad t \in[0,1] \end{equation}\]

由此可以得到Bezier曲线的踢腿计算公式

\[\begin{equation} P_{i}^{k}=\left\{\begin{array}{c}{P_{i}} & {k=0} \\ {(1-t) P_{i}^{k-1}+t P_{i+1}^{k-1}} & {k=1,2, \cdots, n, i=0,1, \cdots, n-k}\end{array}\right. \end{equation}\]

这就是de Castelijau算法。

4 贝塞尔曲线原理动图

一阶贝塞尔曲线
二阶贝塞尔曲线
三阶贝塞尔曲线
四阶贝塞尔曲线
五阶贝塞尔曲线