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=j−p,⋯,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+1−k−uiui+p+1−k−uVi−1,k−1+ui+p+1−k−uiu−uiVi,k−1,k=1,⋯,p,i=j−p+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+1−uj)(uj+1−uj−1)(uj+1−uj−2)(uj+1−u)3Vj−3+[(uj+1−uj)(uj+1−uj−1)(uj+1−uj−2)(uj+1−u)2(u−uj−2)+(uj+1−uj)(uj+1−uj−1)(uj+2−uj−1)(uj+1−u)(u−uj−1)(uj+2−u)+(uj+1−uj)(uj+2−uj)(uj+2−uj−1)(u−uj)(uj+2−u)2]Vj−2+[(uj+1−uj)(uj+1−uj−1)(uj+2−uj−1)(uj+1−u)(u−uj−1)2+(uj+1−uj)(uj+2−uj)(uj+2−uj−1)(u−uj)(uj+2−u)(u−uj−1)+(uj+1−uj)(uj+2−uj)(uj+3−uj)(u−uj)2(uj+3−u)]Vj−1+(uj+1−uj)(uj+2−uj)(uj+3−uj)(u−uj)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+1−uj)(uj+1−uj−1)(uj+1−u)2Vj−2+[(uj+1−uj)(uj+1−uj−1)(uj+1−u)(u−uj−1)

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

234

被折叠的 条评论
为什么被折叠?



