贝塞尔曲线生成方法:
一、The de Casteljau Algorithm
贝塞尔曲线 n+1 个控制点 b0,b1,⋯,bn,t∈[0,1], 那么:
{B(t)=bn0bji=bj−1i(1−t)+bj−1i+1tb0i=bii=0,⋯,n−j,j=1,⋯,n
1、线性曲线
2、二次曲线
3、三次曲线
4、四次曲线
5、五次曲线
6、例子
三次贝塞尔曲线的控制点为:b0(1.0,1.0),b1(2.0,7.0),b2(8.0,6.0),b3(12.0,2.0),其点B(0.25) 求法如下:
b10=34(1.0,1.0)+14(2.0,7.0)=(1.25,2.5)
b11=34(2.0,7.0)+14(8.0,6.0)=(3.5,6.75)
b12=34(8.0,6.0)+14(12.0,2.0)=(9.0,5.0)
b20=34(1.25,2.5)+14(3.5,6.75)=(1.8125,3.5625)
…
算法流程如下:
图形表示如下:
二、任意多项式曲线与贝塞尔曲线的转换
贝塞尔曲线展开:
B(t)=b0(1−t)n+C1n(1−t)n−1t+C2n(1−t)n−2t2+⋯+Cn−1n(1−t)1tn−1+tn=TBezb
一般多项式:
P(t)=a0+a1t+⋯+antn=Ta
定义一下参数:
a=(a0,a1,⋯,an)T,b=(b0,b1,⋯,bn)T
B=(B0,n(t),⋯,Bn,n(t)),T=(1,t,…,n)
Bez=(Bezi,j),Bez−1=(Bez−1i,j),0≤i,j≤n
1、贝塞尔曲线 -> 多项式曲线
表示方法是:
a=Bez⋅b
把贝塞尔曲线按照参数 t 升幂排列,皆可以得到其对应的多项式曲线。
也就是:
ai=∑j=0i(−1)i−jCinCjibj
2、多项式曲线 ->贝塞尔曲线
表示方法是:
b=Bez−1⋅a
Bez(−1)i,j=⎧⎩⎨CjiCjn,0,ifj≤iotherwise
也就是:
bi=∑j=0iCjiCjnaj
3、参考
[1]:https://en.wikipedia.org/wiki/Convex_hull
[2]:Duncan M. Applied Geometry for Computer Graphics and CAD. Springer, 2005.