贝塞尔曲线上一点

本文介绍了计算Bezier曲线上的点的递推算法,特别是使用deCasteljau算法简化计算过程。通过抛物线三切线定理,解释了如何在给定参数下有效求取曲线上的点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算Bezier曲线上的点,可用Bezier曲线方程,但使用de Casteljau提出的递推算法则要简单得多。

    如图3.1.10所示,设P0P02P2是一条抛物线上顺序三个不同的点。过P0P2点的两切线交于P1点,在P02点的切线交P0P1P2P1P01P11,则如下比例成立:

    这是所谓抛物线的三切线定理

图3.1.10 抛物线三切线定理

P0P2固定,引入参数t令上述比值为t:(1-t),即有:

    t0变到1,第一、二式就分别表示控制二边形的第一、二条边,它们是两条一次Bezier曲线。将一、二式代入第三式得:

    当t0变到1时,它表示了由三顶点P0P1P2三点定义的一条二次Bezier曲线。并且表明:这二次Bezier曲线P02可以定义为分别由前两个顶点(P0,P1)和后两个顶点(P1,P2)决定的一次Bezier曲线的线性组合。依次类推,由四个控制点定义的三次Bezier曲线P03可被定义为分别由(P0,P1,P2)和(P1,P2,P3)确定的二条二次Bezier曲线的线性组合,由(n+1)个控制点Pi(i=0,1,...,n)定义的n次Bezier曲线P0n可被定义为分别由前、后n个控制点定义的两条(n-1)次Bezier曲线P0n-1P1n-1的线性组合:

由此得到Bezier曲线的递推计算公式:

    这便是著名的de Casteljau算法。用这一递推公式,在给定参数下,求Bezier曲线上一点P(t)非常有效。上式中:Pi0=Pi是定义Bezier曲线的控制点,P0n即为曲线P(t)上具有参数t的点。de Casteljau算法稳定可靠,直观简便,可以编出十分简捷的程序,是计算Bezier曲线的基本算法和标准算法。

    当n=3时,de casteljau算法递推出的Pik呈直角三角形,对应结果如图3.1.11所示。从左向右递推,最右边点P03即为曲线上的点。

图3.1.11 n=3时,Pin的递推关系

度为t:(1-t)的两段。依次对原始控制多边形每一边执行同样的定比分割,所得分点就是第一级递推生成的中间顶点Pi1(i=0,1,...,n-1),对这些中间顶点构成的控制多边形再执行同样的定比分割,得第二级中间顶点Pi2(i=0,1,...,n-2)。重复进行下去,直到n级递推得到一个中间顶点P0n即为所求曲线上的点P(t),如图3.1.12所示。

图3.1.12 几何作图法求Bezier曲线上一点(n=3,t=1/4)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值