Bezier曲线的de Casteljau算法证明

ezier曲线(又称貝茲曲線或贝塞尔曲线)的定义和性质请看维基百科貝茲曲線。它的定义是:

其中,

,约定00 = 1.

 

e Casteljau算法揭示了Bezier数学上很美的一个性质,我八成相信是先有了这个性质,才有了上面的定义式,当然它们是等价的。首先来看维基百科中的三张图:

二次Bezier曲线

三次Bezier曲线:

四次Bezier曲线:

这三张图展现了Bezier曲线漂亮的数学性质。图中的参数变量t的从0增长到1,红色的线就是Bezier曲线,Bezier曲线上的任一个点(t),都是其它相邻线段的同等比例(t)点处的连线,再取同等比例(t)的点再连线,一直取到最后那条线段的同等比例(t)处,该点就是Beizer曲线上的点(t). 以二次Bezier曲线为例,如该曲线上的1/3点,就是线段P0P1取1/3点,P1P2取1/3点,两点连线,再取其1/3点处即是。这就是de Casteljau算法提出来的,其数学表达式是:

上式中,k表示第k层,以四次Bezier曲线为例,k=0时,就是灰色线段,k=1时,就是绿色线段,k=2就是蓝色线段,一直递推下去就是Bezier上的点(t)了。于是用de Casteljau算法很容易求出Bezier曲线上的任一点(t)的位置。换一种图示的方法表示这种递推关系:

这是用几何画板画的,很难看,解释一下。左边一列是原来(k=0)的控制顶点,第二列是(k=1)的控制顶点,以此类推。每个箭头表示两个点分别乘以1-t和t并加起来,得到右边的点。这样一直做到最后的点就是Bezier上的点(t).

先看P0的系数为什么是,因为每次P0都是乘以(1-t)传到右边的点,这样一直传了n次到达最右端。仔细看一下就可以发现,最左边的点传递到最右边,是靠乘以一系列的t或1-t到达的,那么Pi的系数就是Pi走到最右边左右的"路"的系数之和。比如,P0只能一直走斜下的边,而且只有一条路,记住能不往左走,因此它的系数就是。那么P1的系数就是,因为它到最右边有两条路,且t和1-t的次数是一样的。可以发现每个Pi的每条路的t和1-t的次数都是一样的,而路的条数的系数很熟悉。没错,把上图逆时钟转90°就是杨辉三角了。

杨辉三角有这样的特征:每个数字表示从顶点走下来到该点不同走法的数目,而且无论是哪条路走到该点,向左和向右的次数是一样的,等于该点的二次多项式展开系数。

到了这里,如果看懂了的话,我想已经证明了,剩下就是一些说明性言语了。数学美还没结束,见下图:

 

绿色线按顺序排列的点P0到P0n这n个点可以画出一条n次Bezier曲线,记为B1;蓝色的n个点也可以画出一条n次Bezier曲线;这两条曲线直接接起来,就是原来P0到Pn画出的n次Bezier曲线!神奇吧,它们居然有类似向量的性质。实际应用也是用这个性质,一般取t=1/2,将一条Bezier曲线变成两条小的,再继续分下去,当Bezier曲线足够小时就可以用线段代替曲线了。这个性质同样可以证明,但写到网上很麻烦就不写了,大家推荐好一点的数学画图软件,谢谢。数学有时很美。

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 贝塞尔曲线Casteljau算法是一种递归算法,用于计算贝塞尔曲线上的点。该算法曲线分成若干个小段,每个小段都可以通过递归地计算出其上的点。具体来说,该算法将控制点按照一定的比例分成两部分,然后分别对这两部分递归地应用Casteljau算法,直到只剩下一个点为止。最终,这些点组成的序列就是贝塞尔曲线上的点。 ### 回答2: 贝塞尔曲线计算机图形学中常用的一种曲线,其特点是能够描述复杂的曲线轨迹并且可以通过控制点来调整曲线的形状。 而Casteljau算法是一种递归计算Bezier曲线的方法,它被广泛用于计算机图形学中的曲线绘制问题,也常常被用于解决曲线拟合和曲线插值问题。 该算法的核心思想是将贝塞尔曲线分割成多个子曲线,对于每个子曲线,通过递归继续分割,最后得到所有的曲线段上的点坐标。具体来说,算法的流程如下: 1. 首先,将所有的控制点构成第一级节点,执行递归操作。 2. 在每次递归中,将当前级别的节点复制到下一级节点,并计算中间点,一直递归到最底层。 3. 在最底层的节点上,可以计算该节点对应的曲线上的点坐标。 4. 不断合并曲线段上的点坐标,得到整个贝塞尔曲线Casteljau算法的优点在于递归过程中可以根据需要细分控制多边形的深度和精度,能够灵活地应对不同的问题。同算法间复杂度为O(n^2),也比其他传统的Bezier曲线计算方法更高效。 熟悉Casteljau算法,能够更好地理解Bezier曲线的绘制原理和计算方法,从而在计算机图形学中应用上更加灵活和高效。 ### 回答3: 贝塞尔曲线是一类常用的二维或三维曲线,在计算机图形学中广泛应用。而Casteljau算法就是一种生成Bezier曲线的方法,其本质是一种递归算法,从而实现了对Bezier曲线的插值。 在这个算法中,我们可以将最终的Bezier曲线看作一个多项式函数。此,我们将控制点看作是该多项式的系数。在开始Casteljau算法之前,我们需要先将控制点进行排序,从而保证从一个控制点产生一个Bezier曲线,这样我们就可以确定得到的多项式的系数。 接下来,我们从n个控制点开始,进行递归计算。具体地,我们将两个相邻的控制点进行连接,并计算连接线中点。这个中点就是新生成Bezier曲线中的控制点。然后,我们再将相邻的中点进行连接,并继续计算连接线中点,直到计算得到的中点只有一个。此,这个中点就是Bezier曲线上的一个点,也就是我们要生成的点。 重复进行这个递归过程,直到所有要求的Bezier曲线上的点都生成完成为止。上述过程中,我们需要计算的连接线中点都是通过线性插值来得到的,这就是Casteljau算法的关键所在。 总之,通过Casteljau算法,我们可以根据给定的控制点,生成出千变万化的Bezier曲线,具有极高的灵活性和可塑性,因此被广泛地应用于计算机图形学、计算机辅助设计等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值