这篇文章比较好理解些~
由此得到Bezier 曲线的递推计算公式
设P0、P02、P2是一条抛物线上顺序三个不同的点。过P0和P2点的两切线交于P1点,在P02点的切线交P0P1和P2P1于P01和P11,则如下比例成立:
这是所谓抛物线的三切线定理。
当P0,P2固定,引入参数t,令上述比值为t:(1-t),即有:
当t从0变到1时,它表示了由三顶点P0、P1、P2三点定义的一条二次Bezier曲线。并且表明:这二次Bezier曲线P02可以定义为分别由前两个顶点(P0,P1)和后两个顶点(P1,P2)决定的一次Bezier曲线的线性组合。依次类推,由四个控制点定义的三次Bezier曲线P03可被定义为分别由(P0,P1,P2)和(P1,P2,P3)确定的二条二次Bezier曲线的线性组合,由(n+1)个控制点Pi(i=0,1,...,n)定义的n次Bezier曲线P0n可被定义为分别由前、后n个控制点定义的两条(n-1)次Bezier曲线P0n-1与P1n-1的线性组合:
由此得到Bezier 曲线的递推计算公式
这就是de Casteljau算法;
(注:下面用 PXX 表示点, 用 LXX 表示线段)
看这个图更清晰一些,首先,P0 和 P5 在曲线上,并且 L01 和 L45 为切线;
然后要做的操作就是:
P10 = (1-u)*P0 + u*P1;
P11 = (1-u)*P1 + u*P2;
P12 = (1-u)*P2 + u*P3;
P13 = (1-u)*P3 + u*P4;
P20 = (1-u)*P10 + u*P11;
P21 = (1-u)*P11 + u*P12;
P22 = (1-u)*P12 + u*P13;
P23 = (1-u)*P13 + u*P14;
P30 = (1-u)*P20 + u*P21;
P31 = (1-u)*P21 + u*P22;
P32 = (1-u)*P22 + u*P23;
P40 = (1-u)*P30 + u*P31;
P41 = (1-u)*P31 + u*P32;
P50 = (1-u)*P40 + u*P41;
……
写递归算法的话,核心应该是:
p(i,j) = (1-u) * p(i-1,j) + u * p(i-1,j-1);
恩,觉得今天理解的差不多了,代码回头写写试试~~~
本文深入探讨了贝塞尔曲线中的de Casteljau算法,通过介绍如何利用该算法求解抛物线上点的切线交点,来精确计算曲线上的特定位置。内容涉及过P0、P02、P2三点的切线交点P1,以及P01和P11的比例关系。
2395

被折叠的 条评论
为什么被折叠?



