贝塞尔曲线

背景#

贝塞尔曲线在计算机图形学中的应用十分广泛,photoshop的钢笔工具,字体的轮廓,以及各种需要描述轨迹的地方如摄像机轨迹,粒子的速度曲线都用到了贝塞尔曲线。

贝塞尔曲线的数学基础——伯恩斯坦多项式(可以理解为:一个连续函数,可以将它表示成n个伯恩思坦多项式相加的形式,并且随着n 趋向于无穷大,这个多项式将收敛到原函数)建立于 1912 年,但直到1959 年,数学家 Paul de Casteljau 发明出数值稳定的 de Casteljau 算法时,多项式才应用于图形。de Casteljau 算法在法国获得了专利,但直到 80 年代才公布,而贝塞尔多项式在 1960 年代被法国工程师皮埃尔·贝塞尔(Pierre Bézier)应用于雷诺汽车的车身设计,并得到广泛宣传。

这个网页能模拟钢笔工具的应用:bezier.method.ac/。

贝塞尔曲线公式#

给定一系列控制点,第一个和最后一个控制点为贝塞尔曲线的起点和终点,并且由中间的控制点控制曲率。

下面推导一下贝塞尔曲线的公式。给定n个控制点P0P_0P1P_1……PnP_n,求贝塞尔曲线B(t)B(t)t[0,1]t \in[0, 1]

根据控制点的个数,可以将贝塞尔曲线分类为不同阶数,从一阶曲线推广到多阶,可以快速理解贝塞尔曲线的计算。

一阶贝塞尔曲线(2个控制点)#

这是一条线段,很容易得到曲线的公式

B(t)=P0+(P1P0)t=(1t)P0+tP1B(t) = P_0 + (P_1- P_0) t = (1-t)P_0 + tP_1

二阶贝塞尔曲线(3个控制点)#

先在三个控制点组成的两条线段P0P1P_0P_1P1P2P_1P_2,上用一阶贝塞尔曲线公式求出新的控制点Q0Q_0Q1Q_1,再对这两个新的控制点运用一阶公式,得到的新的点就是贝塞尔曲线在tt的值。

Q0=(1t)P0+tP1Q_0 = (1-t)P_0 + tP_1

Q1=(1t)P1+tP2Q_1 = (1-t)P_1 + tP_2

B(t)=(1t)Q0+tQ1=(1t)2P0+2(1t)tP1+t2P2B(t) = (1-t)Q_0 + tQ_1 = (1-t)^2P0 + 2(1-t)tP_1 + t^2P_2

三阶贝塞尔曲线(4个控制点)#

类似于二阶贝塞尔曲线的推导,

先求出一系列控制点Q0Q_0Q1Q_1Q2Q_2

Q0=(1t)P0+tP1Q_0 = (1-t)P_0 + tP_1

Q1=(1t)P1+tP2Q_1 = (1-t)P_1 + tP_2

Q3=(1t)P2+tP3Q_3 = (1-t)P_2 + tP_3

再求出新的控制点R0R_0R1R_1

R0=(1t)R0+tR1R_0 = (1-t)R_0 + tR_1

R1=(1t)Q1+tQ2R_1 = (1-t)Q_1 + tQ_2

可得贝塞尔曲线的公式,

B(t)=(1t)R0+tR1=(1t)3P0+3t(1t)2P1+3t2(1t)P2+t3P3B(t) = (1-t)R_0 + tR_1 = (1-t)^3P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^3P_3

n阶贝塞尔曲线(n+1个控制点)#

推广到n阶,可得

B(t)=N=0nCniPi(1t)nitiB(t) = \sum_{N=0}^{n} C_n^iP_i(1-t)^{n-i}t^i

以上就是De Casteljau算法的思想,通过递归求控制点,求得贝塞尔曲线。

参考#

  1. en.wikipedia.org/wiki/B%C3%A…
  2. 深入理解贝塞尔曲线 - 掘金
posted @   silence394  阅读(0)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示