Bézier曲线
定义
给定空间n+1个点的位置矢量Pi(i=0,1,2…),则Bezier参数曲线上各点坐标的插值公式是: P ( t ) = ∑ i = 0 n P i B i , n ( t ) , t ∈ [ 0 , 1 ] P(t)=\sum_{i=0}^{n}P_{i}B_{i,n}(t), t\in [0,1] P(t)=∑i=0nPiBi,n(t),t∈[0,1]
其中,Pi构成该贝塞尔曲线的特征多边形,
B
i
,
n
(
t
)
B_{i,n}(t)
Bi,n(t)是n次Bernstein基函数:
B
i
,
n
(
t
)
=
C
i
n
t
i
(
1
−
t
)
n
−
i
=
n
!
i
!
(
n
−
i
)
!
t
i
⋅
(
1
−
t
)
n
−
i
(
i
=
0
,
1
,
.
.
.
,
n
)
B_{i,n}(t) = C_{i}^{n}t^{i}(1-t)^{n-i} = \frac{n!}{i!(n-i)!}t^{i}\cdot (1-t)^{n-i} (i=0,1,...,n)
Bi,n(t)=Cinti(1−t)n−i=i!(n−i)!n!ti⋅(1−t)n−i(i=0,1,...,n)
Bernstein基函数的性质
- 非负性: B i , n ( t ) ≥ 0 , t ∈ [ 0 , 1 ] B_{i,n}(t)≥0, t\in [0,1] Bi,n(t)≥0,t∈[0,1]
- 端点性质
B i , n ( 0 ) = { 1 ( i = 0 ) 0 o t h e r w i s e B_{i,n}(0) = \begin{cases} 1 & (i=0) \\ 0 & otherwise \end{cases} Bi,n(0)={10(i=0)otherwise B i , n ( 1 ) = { 1 ( i = n ) 0 o t h e r w i s e B_{i,n}(1) = \begin{cases} 1 & (i=n) \\ 0 & otherwise \end{cases} Bi,n(1)={10(i=n)otherwise - 权性
∑ i = 0 n B i , n ( 0 ) = ∑ i = 0 n C n i t i ( 1 − t ) n − i = [ ( 1 − t ) + t ] n ≡ 1 \sum_{i=0}^{n}B_{i,n}(0) = \sum_{i=0}^{n}C_{n}^{i}t^{i}(1-t)^{n-i}=[(1-t)+t]^{n}\equiv 1 ∑i=0nBi,n(0)=∑i=0nCniti(1−t)n−i=[(1−t)+t]n≡1 - 对称性
B i , n ( t ) = B n − i , n ( 1 − t ) B_{i,n}(t) = B_{n-i,n}(1-t) Bi,n(t)=Bn−i,n(1−t)
因为
B n − i , n ( 1 − t ) = C n i B_{n-i,n}(1-t) = C{n}^{i} Bn−i,n(1−t)=Cni - 递推性
B i , n ( t ) = ( 1 − t ) B i , n − 1 ( t ) + t B i − 1 , n − 1 ( t ) ( i = 0 , 1 , . . . , n ) B_{i,n}(t) = (1-t)B_{i,n-1}(t) + tB_{i-1,n-1}(t) (i=0,1,...,n) Bi,n(t)=(1−t)Bi,n−1(t)+tBi−1,n−1(t)(i=0,1,...,n)
即高一次的Bernstein基函数可由两个低一次的Bernstein调和函数线性组合而成, 因为 C n i = C n − 1 i + C n − 1 i − 1 C_{n}^{i} = C_{n-1}^{i} + C_{n-1}^{i-1} Cni=Cn−1i+Cn−1i−1 - 导函数
B ′ n ( t ) = n [ B i − 1 , n − 1 ( t ) − B i , n − 1 ( t ) ] ( i = 0 , 1 , . . . , n ) B'n(t) = n[B_{i-1,n-1}(t)-B_{i,n-1}(t)] (i=0,1,...,n) B′n(t)=n[Bi−1,n−1(t)−Bi,n−1(t)](i=0,1,...,n) - 最大值
B i , n ( t ) B_{i,n}(t) Bi,n(t)在 t = i n t = \frac{i}{n} t=ni 处达到最大值 - 升阶公式
( 1 − t ) B i , n ( t ) = ( 1 − i n + 1 ) B i , n + 1 ( t ) (1-t)B_{i,n}(t)=(1-\frac{i}{n+1})B_{i,n+1}(t) (1−t)Bi,n(t)=(1−n+1i)Bi,n+1(t)
t B i , n ( t ) = i + 1 n + 1 B i + 1 , n + 1 ( t ) tB_{i,n}(t)=\frac{i+1}{n+1}B_{i+1,n+1}(t) tBi,n(t)=n+1i+1Bi+1,n+1(t)
B i , n ( t ) = ( 1 − i n + 1 ) B i , n + 1 ( t ) + i + 1 n + 1 B i + 1 , n + 1 ( t ) B_{i,n}(t)=(1-\frac{i}{n+1})B_{i,n+1}(t)+\frac{i+1}{n+1}B_{i+1,n+1}(t) Bi,n(t)=(1−n+1i)Bi,n+1(t)+n+1i+1Bi+1,n+1(t) - 积分 ∫ 0 1 B i , n ( t ) = 1 n + 1 \int_{0}^{1}B_{i,n}(t) = \frac{1}{n+1} ∫01Bi,n(t)=n+11
Bezier曲线的性质
- 端点性质
- 曲线端点位置矢量
由Bernstein基函数的端点性质可以推得,当t=0时,P(0)=P0 ;当t=1时,P(1)=Pn。由此可见,Bézier曲线的起点、终点与相应的特征多边形的起点、终点重合。 - 切矢量
因为 P ′ ( t ) = n ∑ i = 0 n − 1 P i [ B i − 1 , n − 1 ( t ) − B i , n − 1 ( t ) ] P'(t) = n\sum_{i=0}^{n-1}P_{i}[B_{i-1,n-1}(t) - B_{i,n-1}(t)] P′(t)=n∑i=0n−1Pi[Bi−1,n−1(t)−Bi,n−1(t)]
所以当t=0时,P’(0)=n(P1-P0),当t=1时,P’(1)=n(Pn-Pn-1),这说明Bézier曲线的起点和终点处的切线方向和特征多边形的第一条边及最后一条边的走向一致。
- 曲线端点位置矢量
- 对称性:由控制顶点构造出的新Bézier曲线,与原Bézier曲线形状相同,走向相反。
这个性质说明Bézier曲线在起点处有什么几何性质,在终点处也有相同的性质。 - 几何不变性:是指某些几何特性不随坐标变换而变化的特性
- 变差缩减性:若Bézier曲线的特征多边形是一个平面图形,则平面内任意直线与C(t)的交点个数不多于该
直线与其特征多边形的交点个数,这一性质叫变差缩减性质。
此性质反映了Bézier曲线比其特征多边形的波动还小,也就是说Bézier曲线比特征多边形的折线更光顺。 - 仿射不变性:在仿射变换下,Bézier曲线的形式不变。
Bézier曲线的生成
-
根据定义直接生成Bézier曲线(计算量较大)
B i , n ( t ) = C i n t i ( 1 − t ) n − i = n ! i ! ( n − i ) ! t i ⋅ ( 1 − t ) n − i ( i = 0 , 1 , . . . , n ) B_{i,n}(t) = C_{i}^{n}t^{i}(1-t)^{n-i} = \frac{n!}{i!(n-i)!}t^{i}\cdot (1-t)^{n-i} (i=0,1,...,n) Bi,n(t)=Cinti(1−t)n−i=i!(n−i)!n!ti⋅(1−t)n−i(i=0,1,...,n)- 给出 C n i C_{n}^{i} Cni的递归计算式 C n i = n ! i ! ( n − 1 ) ! = n − i + 1 i C n i − 1 C_{n}^{i}=\frac{n!}{i!(n-1)!}=\frac{n-i+1}{i}C_{n}^{i-1} Cni=i!(n−1)!n!=in−i+1Cni−1, 其中n ≥ i
- 将p(t)表示成分量坐标形式
-
Bézier曲线的递推算法
Bézier曲线上的任一个点(t),都是其它相邻线段的同等比例(t)点处的连线,再取同等比例(t)的点再连线,一直取到最后那条线段的同等比例(t)处,该点就是Bézier曲线上的点(t) -
de Casteljau算法几何作图
Bézier曲线的拼接
Bézier曲线次数的提高,而高次多项式又会带来计算上的困难,实际使用中,一般不超过10次。采用分段设计,然后将各段曲线相互连接起来,并在接合处保持一定的连续条件。
给定两条Bézier曲线P(t)和Q(t),相应控制点为Pi(i=0, 1, …, n)和Qj(j=0,1,…, m)
- 要使它们达到G0连续,则:Pn= Q0
- 要使它们达到G1连续(平面),只要保证Pn-1,Pn=Q,Q1三点共线就行了(因为Bezier曲线的起点和终点处的切线方向和特征多边形的第一条边及最后一条边的走向一致)
- 要使它们达到G2连续(空间),则保证密切平面重合,副法线向量同向且曲率连续,更准确的说是曲率矢连续
Bézier曲面
定义
设 P i , j P_{i,j} Pi,j(i=0,1,…,m; j=0,1,…,n)为(m+1)(n+1)个空间点列,则m×n次张量积形式的Bézier曲面定义为:
P ( u , v ) = ∑ i = 0 m ∑ j = 0 n P i j B i , m ( u ) B j , n ( v ) P(u,v)=\sum_{i=0}^{m}\sum_{j=0}^{n}P_{ij}B_{i,m}(u)B_{j,n}(v) P(u,v)=∑i=0m∑j=0nPijBi,m(u)Bj,n(v) u , v ∈ [ 0 , 1 ] u,v\in [0,1] u,v∈[0,1]
其中 B i , m ( u ) = C m i u i ( 1 − u ) m − i B_{i,m}(u)=C_{m}^{i}u^{i}(1-u)^{m-i} Bi,m(u)=Cmiui(1−u)m−i, B j , n ( v ) = C n j u i ( 1 − v ) n − j B_{j,n}(v)=C_{n}^{j}u^{i}(1-v)^{n-j} Bj,n(v)=Cnjui(1−v)n−j是Bernstein基函数。依次用线段连接点列中相邻两点所形成的空间网格,称之为特征网格。
矩阵表示式
在一般应用中,n和m不大于4
Bézier曲面的性质
-
角点位置:Bézier曲面特征网格的四个角点正好是Bézier曲面的四个角点,即
P ( 0 , 0 ) = P 0 , 0 P(0,0)=P_{0,0} P(0,0)=P0,0 P ( 0 , 1 ) = P 0 , n P(0,1)=P_{0,n} P(0,1)=P0,n
P ( 1 , 0 ) = P m , 0 P(1,0)=P_{m,0} P(1,0)=Pm,0 P ( 1 , 1 ) = P m , n P(1,1)=P_{m,n} P(1,1)=Pm,n -
边界线:四条边界线也是Bézier曲线
P ( u , 0 ) = ∑ j = 0 m P j , 0 B E Z j , m ( u ) P(u,0)=\sum_{j=0}^{m}P_{j,0}BEZ_{j,m}(u) P(u,0)=∑j=0mPj,0BEZj,m(u) P ( v , 0 ) = ∑ k = 0 n P k , 0 B E Z k , n ( v ) P(v,0)=\sum_{k=0}^{n}P_{k,0}BEZ_{k,n}(v) P(v,0)=∑k=0nPk,0BEZk,n(v)
P ( u , 1 ) = ∑ j = 0 m P j , 0 B E Z j , m ( u ) P(u,1)=\sum_{j=0}^{m}P_{j,0}BEZ_{j,m}(u) P(u,1)=∑j=0mPj,0BEZj,m(u) P ( v , 1 ) = ∑ j = 0 n P k , 0 B E Z k , n ( v ) P(v,1)=\sum_{j=0}^{n}P_{k,0}BEZ_{k,n}(v) P(v,1)=∑j=0nPk,0BEZk,n(v) -
几何不变性
-
对称性
-
凸包性
Bézier曲面的拼接
设两张m×n次Bézier曲面片
P ( u , v ) = ∑ i = 0 m ∑ j = 0 n P i j B i , m ( u ) B j , n ( v ) P(u,v)=\sum_{i=0}^{m}\sum_{j=0}^{n}P_{ij}B_{i,m}(u)B_{j,n}(v) P(u,v)=∑i=0m∑j=0nPijBi,m(u)Bj,n(v)
Q ( u , v ) = ∑ i = 0 m ∑ j = 0 n Q i j B i , m ( u ) B j , n ( v ) Q(u,v)=\sum_{i=0}^{m}\sum_{j=0}^{n}Q_{ij}B_{i,m}(u)B_{j,n}(v) Q(u,v)=∑i=0m∑j=0nQijBi,m(u)Bj,n(v)
如果要求两曲面片达到
G
0
G^{0}
G0连续,则它们有公共的边界,即:
P
(
1
,
v
)
=
Q
(
0
,
v
)
P(1,v)=Q(0,v)
P(1,v)=Q(0,v)
于是有
P
n
i
=
Q
0
i
P_{ni}=Q_{0i}
Pni=Q0i, (i = 0, 1,…, m)
如果又要求沿该公共边界达到
G
1
G^{1}
G1连续,则两曲面片在该边界上有公共的切平面,因此曲面的法向应当是跨界连续的,即:
Q
u
(
0
,
v
)
×
Q
v
(
0
,
v
)
=
α
(
v
)
P
u
(
1
,
v
)
×
P
v
(
1
,
v
)
Q_{u}(0,v)×Q_{v}(0,v)=\alpha(v)P_{u}(1,v)×P_{v}(1,v)
Qu(0,v)×Qv(0,v)=α(v)Pu(1,v)×Pv(1,v)
Bézier不足
- Bézier曲线或曲面不能作局部修改
- Bézier曲线或曲面的拼接比较复杂