德卡斯特里奥算法

✍ dations ◷ 2025-12-05 10:09:33 #算法,数值分析,样条

数学子领域数值分析中的德卡斯特里奥算法(英语:De Casteljau's algorithm),以发明者保尔·德·卡斯特里奥命名,是计算伯恩斯坦形式的多项式或贝塞尔曲线的递归方法。

虽然对于大部分的体系结构,该算法和直接方法相比较慢,但它在数值上更为稳定。

贝兹曲线(角度为,控制点 β 0 , , β n {\displaystyle \beta _{0},\ldots ,\beta _{n}} 为伯恩施坦基本多项式(英语:Bernstein polynomial)

曲线在0点上可以用递推关系式运算

然后, B {\displaystyle B} 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

代码实现

Haskell

用线性插值计算P和Q之间的一点R,插值参数为t用法:linearInterp P Q t          P = 代表一个点的表          Q = 代表一个点的表          t = 线性插值的参数值, t<-返回:代表点(1-t)P + tQ的表>	linearInterp :: ->->Float->>	linearInterp   _ = >	linearInterp (p:ps) (q:qs) t = (1-t)*p + t*q : linearInterp ps qs t计算一对控制点间的线性插值的中间结果用法:eval t b          t = 线性插值的参数值, t<-          b = 控制点的表返回:对n个控制点,返回n-1个插值点的表>	eval :: Float->]->]>	eval t(bi:bj:)= >	eval t (bi:bj:bs) = (linearInterp bi bj t) : eval t (bj:bs)用de Casteljau算法计算Bezier曲线上一点用法:deCas t b          t = 线性插值的参数值, t<-          b = 控制点的表返回:代表Bezier曲线上一个点的列表>	deCas :: Float->]->>	deCas t(bi:)= bi>	deCas t bs = deCas t (eval t bs)用de Casteljau算法计算沿着Bezier曲线的一系列点。点用一个列表返回。用法:bezierCurve n b         n = 要计算的点的个数         b = Bezier控制点列表返回:Bezier曲线上n+1个点例子:bezierCurve 50 <nowiki>,,,]</nowiki>>	bezierCurve :: Int->]->]>	bezierCurve n b =  ]

Python

(该代码用到)

相关

  • 大豆异黄酮大豆苷元,也称为黄豆苷元、大豆异黄酮(英语:Daidzein,系统名:7-羟基-3-(4-羟苯基)-4H-色烯-4-酮,7-hydroxy-3-(4-hydroxyphenyl)-4H-chromen-4-one)是一种出现在大豆等豆科作物中的
  • 沃尔夫物理学奖沃尔夫物理学奖(Wolf Prize in Physics)是以色列沃尔夫基金会每年一次(虽然有些年度并无获奖者)授予杰出物理人士的一个奖项,是沃尔夫奖六个奖项之一,自1978年以来开始颁发。沃尔
  • 哲学及神学专科学院伦敦大学哲学及神学专科学院(英语:Heythrop College, University of London),或译海斯罗珀学院,是伦敦大学位于伦敦肯辛顿的哲学和神学专科学院。提供哲学及神学相关学科的学士与
  • 南非边境战争军事僵局~71,000人(1988年)~122,000人(1988年)南非边境战争(南非语:Suid-Afrikaanse Grensoorlog),又称为纳米比亚独立战争,在南非有时称安哥拉丛林战争,是于1966年8月26日到1990年3月
  • 黄热病疫苗黄热病疫苗是用于预防黄热病的疫苗。 黄热病是一种发生在南美与非洲地区的病毒性感染症。99%左右的人在接种疫苗后的一个月,就能出现终生的免疫力。 黄热病疫苗也被用于控制
  • PlayStation 3游戏列表“PlayStation 3”游戏以公开发售,或透过下载游戏至硬盘内游玩。部分游戏同时提供光盘版本及网络付费下载版本。“PlayStation 3”公开发售的游戏以“蓝光光盘”作为光盘格式
  • 理姓理姓,源自理氏。理氏是中国的古老姓氏之一,出自黄帝的孙子颛顼帝的后裔皋陶,属于以官职名为氏。秦汉后姓氏合流,理氏逐渐成为理姓。尧时,皋陶被授予大理的职务(掌管刑狱的官),其子
  • 成蕙琳成蕙琳(韩语:성혜림,1937年1月24日-2002年5月18日)是朝鲜电影演员,被视为朝鲜最高领袖金正日的第二任妻子。成蕙琳生于日治朝鲜庆尚南道昌宁郡,成有庆的二女,由于其父信仰共产主义而
  • 磁化内衬惯性核聚变磁化内衬惯性核聚变(英语:Magnetized Liner Inertial Fusion, MagLIF),是一种产生能量的方法,该方法用100纳秒的电脉冲产生强烈的Z-pinch(英语:Z-pinch)磁场,向内压碎装有燃料的圆柱
  • 白腹长尾猴白腹长尾猴()属于猴科,生活在西非的加纳和喀麦隆之间。白腹长尾猴也生活在格林纳达岛上,因为在18世纪时,有前往新大陆的奴隶船作为运输媒介。 这种长尾猴生活在森林里,为群体生