贝塞尔曲线(Bézier Curves)学习笔记
最近在研究贝塞尔曲线,顺便记录下学习心得。
Bézier Curves—de Casteljau Algorithm(德卡斯特里奥算法)
Bézier Curves是依照de Casteljau Algorithm画出来的,以quadratic Bezier为例:
给定三个控制点
b
0
、
b
1
、
b
2
.
b_{0}、b_{1}、b_{2}.
b0、b1、b2.
假设曲线从时间0开始至时间1结束,规定t为对应时间t。那么我们只需要找到任意t对应的位置即可。
其中
b
0
1
b_{0}^1
b01为线段
b
0
b_{0}
b0
b
1
b_{1}
b1上时间t时对应的位置,
b
1
1
b_{1}^1
b11为线段
b
1
b_{1}
b1
b
2
b_{2}
b2上时间t对应的位置,
b
0
2
b_{0}^2
b02为线段
b
0
1
b
1
1
b_{0}^1 b_{1}^1
b01b11上时间t对应的位置,那么
b
0
2
b_{0}^2
b02就为时间t对应的Bézier Curves上的点。
这个算法称作de Casteljau Algorithm。假设某点时刻t对应的位置b,其相关函数为b(t)。那么显然(将t=0,t=1带入验证)
b 0 1 ( t ) = ( 1 − t ) b 0 + t b 1 b_{0}^1(t) = (1-t)b_{0} + tb_{1} b01(t)=(1−t)b0+tb1
b 1 1 ( t ) = ( 1 − t ) b 1 + t b 2 b_{1}^1(t) = (1-t)b_{1} + tb_{2} b11(t)=(1−t)b1+tb2
则 b 0 2 ( t ) = ( 1 − t ) b 0 1 + t b 1 1 b_{0}^2(t) = (1-t)b_{0}^1 + tb_{1}^1 b02(t)=(1−t)b01+tb11
展开上式得 b 0 2 ( t ) = ( 1 − t ) 2 b 0 + 2 t ( 1 − t ) b 1 + t 2 b 2 b_{0}^2(t) = (1-t)^2b_{0} + 2t(1-t)b_{1}+t^2b_{2} b02(t)=(1−t)2b0+2t(1−t)b1+t2b2
则可以得到n阶贝塞尔曲线可以表示为
b
n
(
t
)
=
∑
j
=
0
n
b
j
B
j
n
(
t
)
b^n(t) =\sum _{j=0}^n b_{j}B_{j}^n(t)
bn(t)=j=0∑nbjBjn(t)
其中 B j n ( t ) B_{j}^n(t) Bjn(t)为伯恩斯坦多项式
即
B
j
n
(
t
)
=
(
i
n
)
t
i
(
1
−
t
)
n
−
i
B_{j}^n(t)= \left (_{i}^n \right) t^i(1-t)^{n-i}
Bjn(t)=(in)ti(1−t)n−i
伯恩斯坦多项式可以从概率论的角度进行解释:假设做一个实验成功的概率是u ,每次实验间是相互独立同分布的随机变量,满足伯努利分布(Bernoulli law)。 如果连续尝试这个实验 n 次,则成功次数正好是 i 次的概率。
伯恩斯坦多项式是对称的,因为
(
i
n
)
\left (_{i}^n \right)
(in)=
(
n
−
i
n
)
\left (_{n-i}^n \right)
(n−in):
贝塞尔曲线的一些性质:
-
各项系数之和为1
-
对称性
-
递归性
(性质2和3都可以从上面推导出)
-
凸包(Convex Hull)性质
贝塞尔曲线始终会在包含了所有控制点的最小凸多边形中, 不是按照控制点的顺序围成的最小多边形.
5.仿射变换(Affine transformation)性质
在几何上对贝塞尔曲线做仿射变换相当于对其控制点做仿射变换再求对应的贝塞尔曲线,其效果是等价的。