数学子领域数值分析中的德卡斯特里奥算法(英语:De Casteljau's algorithm),以发明者保尔·德·卡斯特里奥命名,是计算伯恩斯坦形式的多项式或贝塞尔曲线的递归方法。
虽然对于大部分的体系结构,该算法和直接方法相比较慢,但它在数值上更为稳定。
贝兹曲线(角度为,控制点为伯恩施坦基本多项式(英语:Bernstein polynomial)
曲线在0点上可以用递推关系式运算
然后,0来计算波恩斯坦多项式时,我们可以用三角形形式的两个对角线来构造多项式的分段表示。
把它变成
以及
我们要计算2次波恩斯坦多项式,其伯恩斯坦系数为
在0点计算。
我们有下式开始递归
递归的第二次重复结束于
这就是我们所预料的n阶伯恩斯坦多项式。
在计算带+1个控制点P的三维空间中的次贝塞尔曲线 (Bézier curve) 时
其中
我们把Bézier曲线分成三个分立的方程
然后我们用de Casteljau算法分别计算。
这是一个递归的画出一条从点到,弯向和的曲线的伪代码例子。参数是递归的次数。该过程用增加了的参数来递归的调用它自己。当达到这个全局变量时,在和之间就画上直线。函数去两个点,并返回这两点间的线段的中点。
global max_level = 5 procedure draw_curve(P1, P2, P3, P4, level) if (level > max_level) draw_line(P1, P4) else L1 = P1 L2 = midpoint(P1, P2) H = midpoint(P2, P3) R3 = midpoint(P3, P4) R4 = P4 L3 = midpoint(L2, H) R2 = midpoint(R3, H) L4 = midpoint(L3, R2) R1 = L4 draw_curve(L1, L2, L3, L4, level + 1) draw_curve(R1, R2, R3, R4, level + 1) end procedure draw_curve