曲线二(贝塞尔曲线)

932 阅读2分钟

上一篇:曲线(一)

幂基曲线的劣势
  1. 在交互设计中不自然:系数{a_i}在曲线形状的表示上几何意义不够深刻,另外一点是,一个设计师通常希望在曲线的开始和结束位置指定终止条件,而不仅仅只是开始位置
  2. 幂基多项式的算法处理过程只有一个代数表达式,没有一点几何的含义
  3. 数学上来说,这是一个相当差劲的表达式,如果系数变化非常大,这种方法计算的结果发生的误差非常大
介绍

n阶Bezier curve由n+1个控制点组成,引入变量u(u[0,1])u(u∈[0,1]),在由控制点组成的n条连线中刻画出每条线段中u对应比例的那一点,然后连接成比例的点,重复连线成比例的步骤,找到最后一条一阶线段,刻画u对应成比例的点,这个点从0到1比例的轨迹称之为Bezier curve贝塞尔曲线

图像

bezierCurve1.gif

N阶Bezier Curve表达式

2.png

参数解释:C(u)表示为Bezier曲线函数,B表示Bernstein(伯恩斯坦)多项式,PiP_i,n为阶数,i=0

曲线拆解

image.png

以图所示的二阶Bezier curve为例

  1. 存在A,B,C三个控制点,变量u
  2. 当u在线段AB上处于D点时,线段BC对应比例取E,然后在线段DE上同样对应比例取点F
  3. 当u完成从0到1的移动时,点F移动的轨迹进行连线便形成了一条Bezier Curve
Bernstein Polymerization(伯恩斯坦多项式)

在n阶贝塞尔曲线的表达式中,我们使用了Bernstein作为系数,为什么使用这个多项式呢,我们先来看一下1-3阶贝塞尔曲线的代数表达

Linear Bezier Curve (degree = 1)

P(u)=P0+u(P1P0)P(u)=P_0+u(P_1-P_0)

Quadratic Bezier Curve (degree = 2)

B(u)=(1u)[(1u)P0+uP1]+u[(1u)P1+uP2]B(u)=(1-u)[(1-u) P_0+uP_1 ]+u[(1-u) P_1+uP_2]

化简后得

B(u)=[(1u)2P0+2(1u)uP]1+u2P2B(u)=[(1-u)^2 P_0+2(1-u)uP]_1+u^2 P_2

Cubic Bezier Curve (degree = 3)

B(u)=(1u)B(p0,p1,p2)(u)+uB(p1,p2,p3)B(u)=(1-u) B_(p_0,p_1,p_2 ) (u)+uB_(p_1,p_2,p_3 )

化简后得

B(u)=(1u)3P0+3(1u)2uP1+3(1u)u2P2+u3P3B(u)=(1-u)^3 P_0+3(1-u)^2 uP_1+3(1-u)u^2 P_2+u^3 P_3

上述为Bezier Curve的常用的阶数对应表达式,下面我们来观察Bernstein的通用表达式

image.png

以n=3为例进行计算

image.png

从上述结论可以得出Bezier Curve的系数与Bernstein Polymerization的关系

注意

degree=3为常用的阶数,一个高阶数的贝塞尔曲线通常是由多个低阶的贝塞尔曲线进行拟合组成,为什么不直接使用高阶贝塞尔曲线进行模拟呢,主要是因为阶数过大导致计算复杂,计算量过大