B样条曲线插值

本文详细介绍了B样条曲线的反求控制点算法,包括DeBoor算法和不同幂次下B样条曲线上点的计算公式。通过解析3次B样条曲线的性质,给出了反求控制点的方程组构造方法,并讨论了端点条件对求解的影响。最后,介绍了如何利用追赶法高效求解该类方程组。

B样条曲线反算控制点

1 De Boor算法

u∈[uj,uj+1)u\in[u_j,u_{j+1})u[uj,uj+1)Vi,0=ViV_{i,0}=V_iVi,0=Vi,对于i=j−p,⋯ ,ji=j-p,\cdots,ji=jp,,j

Vi,k=ui+p+1−k−uui+p+1−k−uiVi−1,k−1+u−uiui+p+1−k−uiVi,k−1,k=1,⋯ ,p,i=j−p+k,⋯ ,jV_{i,k}=\dfrac{u_{i+p+1-k}-u}{u_{i+p+1-k}-u_i}V_{i-1,k-1}+\dfrac{u-u_i}{u_{i+p+1-k}-u_i}V_{i,k-1},\quad k=1,\cdots,p,\quad i=j-p+k,\cdots,jVi,k=ui+p+1kuiui+p+1kuVi1,k1+ui+p+1kuiuuiVi,k1,k=1,,p,i=jp+k,,j

其中ViV_iVi为控制点,ppp为B样条的幂次,P(u)P(u)P(u)为B样条曲线,则
P(u)=Vj,p. P(u)=V_{j,p}. P(u)=Vj,p.

2 B样条曲线上点的计算公式

u∈[uj,uj+1)u\in[u_j,u_{j+1})u[uj,uj+1),则

p=3p=3p=3时,
P(u)=(uj+1−u)3(uj+1−uj)(uj+1−uj−1)(uj+1−uj−2)Vj−3+[(uj+1−u)2(u−uj−2)(uj+1−uj)(uj+1−uj−1)(uj+1−uj−2)+(uj+1−u)(u−uj−1)(uj+2−u)(uj+1−uj)(uj+1−uj−1)(uj+2−uj−1)+(u−uj)(uj+2−u)2(uj+1−uj)(uj+2−uj)(uj+2−uj−1)]Vj−2+[(uj+1−u)(u−uj−1)2(uj+1−uj)(uj+1−uj−1)(uj+2−uj−1)+(u−uj)(uj+2−u)(u−uj−1)(uj+1−uj)(uj+2−uj)(uj+2−uj−1)+(u−uj)2(uj+3−u)(uj+1−uj)(uj+2−uj)(uj+3−uj)]Vj−1+(u−uj)3(uj+1−uj)(uj+2−uj)(uj+3−uj)Vj. \begin{aligned} P(u)=&\dfrac{(u_{j+1}-u)^3}{(u_{j+1}-u_j)(u_{j+1}-u_{j-1})(u_{j+1}-u_{j-2})}V_{j-3} +\left[\dfrac{(u_{j+1}-u)^2(u-u_{j-2})}{(u_{j+1}-u_j)(u_{j+1}-u_{j-1})(u_{j+1}-u_{j-2})}\right. \\ & \left. +\dfrac{(u_{j+1}-u)(u-u_{j-1})(u_{j+2}-u)}{(u_{j+1}-u_j)(u_{j+1}-u_{j-1})(u_{j+2}-u_{j-1})} +\dfrac{(u-u_j)(u_{j+2}-u)^2}{(u_{j+1}-u_j)(u_{j+2}-u_j)(u_{j+2}-u_{j-1})}\right]V_{j-2} \\ &+\left[\dfrac{(u_{j+1}-u)(u-u_{j-1})^2}{(u_{j+1}-u_j)(u_{j+1}-u_{j-1})(u_{j+2}-u_{j-1})} +\dfrac{(u-u_j)(u_{j+2}-u)(u-u_{j-1})}{(u_{j+1}-u_j)(u_{j+2}-u_j)(u_{j+2}-u_{j-1})} \right. \\ &\left. +\dfrac{(u-u_j)^2(u_{j+3}-u)}{(u_{j+1}-u_j)(u_{j+2}-u_j)(u_{j+3}-u_j)}\right]V_{j-1} +\dfrac{(u-u_j)^3}{(u_{j+1}-u_j)(u_{j+2}-u_j)(u_{j+3}-u_j)}V_j. \end{aligned} P(u)=(uj+1uj)(uj+1uj1)(uj+1uj2)(uj+1u)3Vj3+[(uj+1uj)(uj+1uj1)(uj+1uj2)(uj+1u)2(uuj2)+(uj+1uj)(uj+1uj1)(uj+2uj1)(uj+1u)(uuj1)(uj+2u)+(uj+1uj)(uj+2uj)(uj+2uj1)(uuj)(uj+2u)2]Vj2+[(uj+1uj)(uj+1uj1)(uj+2uj1)(uj+1u)(uuj1)2+(uj+1uj)(uj+2uj)(uj+2uj1)(uuj)(uj+2u)(uuj1)+(uj+1uj)(uj+2uj)(uj+3uj)(uuj)2(uj+3u)]Vj1+(uj+1uj)(uj+2uj)(uj+3uj)(uuj)3Vj.
p=2p=2p=2时,
P(u)=(uj+1−u)2(uj+1−uj)(uj+1−uj−1)Vj−2+[(uj+1−u)(u−uj−1)(uj+1−uj)(uj+1−uj−1)+(u−uj)(uj+2−u)(uj+1−uj)(uj+2−uj)]Vj−1+(u−uj)2(uj+1−uj)(uj+2−uj)Vj. \begin{aligned} P(u)=&\dfrac{(u_{j+1}-u)^2}{(u_{j+1}-u_j)(u_{j+1}-u_{j-1})}V_{j-2} +\left[\dfrac{(u_{j+1}-u)(u-u_{j-1})}{(u_{j+1}-u_j)(u_{j+1}-u_{j-1})} \right. \\ &\left.+\dfrac{(u-u_j)(u_{j+2}-u)}{(u_{j+1}-u_j)(u_{j+2}-u_j)}\right]V_{j-1} +\dfrac{(u-u_j)^2}{(u_{j+1}-u_j)(u_{j+2}-u_j)}V_j. \end{aligned} P(u)=(uj+1uj)(uj+1uj1)(uj+1u)2Vj2+[(uj+1uj)(uj+1uj1)(uj+1u)(uuj1)

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值