德卡斯特里奥算法

✍ dations ◷ 2025-11-20 12:35:17 #算法,数值分析,样条

数学子领域数值分析中的德卡斯特里奥算法(英语: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

(该代码用到)

相关

  • p634A9Z、​1RG6、​2RMN、​2Y9T、​2Y9U、​3QYM、​3QYN、​3US0、​3US1、​3US2、​3ZY0、​3ZY1862622061ENSG00000073282ENSMUSG00000022510Q9H3D4O88898NM_001114978、
  • 阶级实证主义 · 反实证主义(英语:Antipositivism) 结构主义 · 冲突理论 中层理论 · 形式理论 批判理论人口 · 团体 · 组织(英语:Organizational theory) · 社会化 社会性
  • 李淏朝鲜孝宗(朝鲜语:조선 효종/朝鮮 孝宗 Joseon Hyojong;1619年2月14日-1659年6月23日),名李淏(朝鲜语:이호/李淏 Yi Ho), 是朝鲜王朝的第17代君主,1649年-1659年在位。庙号孝宗,谥号宣文章
  • 冷处理冷处理,又名雪藏、低调处理、淬火效应,是公共关系的手法,相对于广告、宣传、推广、头条热卖。为了达到“隐恶扬善”的目的,把自己一方的“好人好事”高调宣传;把不光彩的作“冷处
  • 食蚁狸科食蚁狸科(学名:Eupleridae),是哺乳纲食肉目当中原生于马达加斯加的物种,可以分成两个亚科、7个属、10个品种。当中环尾獴亚科(Galidiinae)四个属原来属獴科(Herpestidae),而食蚁狸亚科
  • 足球员足球员,在英语中也称footballer或soccer player是一个运动员,包含各种不同的足球。主要形式有足球、美式足球、加拿大式足球、澳式足球、盖尔式足球、联盟式橄榄球和橄榄球。
  • TAS2R43· motile cilium 味觉感受器,类型2,成员43,TAS2R43 是一个人类基因组中基因编码的蛋白质,是苦味味觉感受器的一员。
  • 胡吉伐胡吉伐(英语:Hudjefa I,古埃及文Hudjefa的意思是“遗失”或“被抹除”,并非其真实名字),古埃及早王朝时期第二王朝国王。在位约2年,事迹不明。
  • 小姑居处小姑居处()是1942年美国的一部浪漫喜剧电影。导演是乔治·斯蒂文斯。主演则是史宾塞·屈赛和凯瑟琳·赫本。这部电影是两人首次同台主演一部电影。这部电影获得第15届奥斯卡奖
  • 童瑞童瑞(1455年-1528年),字世奇,四川嘉定州犍为县人,军籍,明朝政治人物,弘治庚戌进士,授给事中。嘉靖间累官至工部尚书。弘治三年(1490年)登庚戌科进士。授给事中。历浙江左参议、陕西左参