De Boor算法
設u∈[uj,uj+1),Vi,0=Vi,對於i=j−p,⋯,j
令
Vi,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
其中Vi爲控制點,p爲B樣條的冪次,P(u)爲B樣條曲線,則
P(u)=Vj,p.
De Boor遞推算法求B樣條曲線上的點
設u∈[uj,uj+1),則
P(u)=====i=0∑nNi,p(u)Vi=i=j−p∑jNi,p(u)Vii=j−p∑j(ui+p−uiu−uiNi,p−1(u)+ui+p+1−ui+1ui+p+1−uNi+1,p−1(u))Vii=j−p∑jui+p−uiu−uiNi,p−1(u)Vi+i=j−p∑jui+p+1−ui+1ui+p+1−uNi+1,p−1(u)Vii=j−p+1∑jui+p−uiu−uiNi,p−1(u)Vi+i=j−p+1∑jui+p−uiui+p−uNi,p−1(u)Vi−1i=j−p+1∑j(ui+p−uiu−uiVi+ui+p−uiui+p−uVi−1)Ni,p−1(u).
令
Vi,k=⎩⎨⎧Vi,k=0ui+p+1−k−uiui+p+1−k−uVi−1,k−1+ui+p+1−k−uiu−uiVi,k−1,k=1,⋯,p
則
P(u)=i=j−p+k∑jNi,p−k(u)Vi,k=Vj,p
De Boor遞推算法求B樣條曲線的一階導矢
設u∈[uj,uj+1),則
P′(u)=====i=0∑nNi,p′(u)Vi=i=j−p∑jNi,p′(u)Vii=j−p∑j(ui+p−uipNi,p−1(u)−ui+p+1−ui+1pNi+1,p−1(u))Vii=j−p∑jui+p−uipNi,p−1(u)Vi−i=j−p∑jui+p+1−ui+1pNi+1,p−1(u)Vii=j−p+1∑jui+p−uipNi,p−1(u)Vi−i=j−p+1∑jui+p−uipNi,p−1(u)Vi−1pi=j−p+1∑jui+p−uiVi−Vi−1Ni,p−1(u).
記
Δ=====i=j−p+1∑jui+p−uiVi−Vi−1Ni,p−1(u)i=j−p+1∑jui+p−uiVi−Vi−1(ui+p−1−uiu−uiNi,p−2(u)+ui+p−ui+1ui+p−uNi+1,p−2(u))i=j−p+1∑jui+p−uiVi−Vi−1ui+p−1−uiu−uiNi,p−2(u)+i=j−p+1∑jui+p−uiVi−Vi−1ui+p−ui+1ui+p−uNi+1,p−2(u)i=j−p+2∑jui+p−uiVi−Vi−1ui+p−1−uiu−uiNi,p−2(u)+i=j−p+2∑jui+p−1−ui−1Vi−1−Vi−2ui+p−1−uiui+p−1−uNi,p−2(u)i=j−p+2∑j(ui+p−uiVi−Vi−1ui+p−1−uiu−ui+ui+p−1−ui−1Vi−1−Vi−2ui+p−1−uiui+p−1−u)Ni,p−2(u).
因此
P′(u)==pi=j−p+1∑jui+p−uiVi−Vi−1Ni,p−1(u)pi=j−p+2∑j(ui+p−uiVi−Vi−1ui+p−1−uiu−ui+ui+p−1−ui−1Vi−1−Vi−2ui+p−1−uiui+p−1−u)Ni,p−2(u).
令
Qi,k=⎩⎪⎨⎪⎧ui+p−uiVi−Vi−1,k=1ui+p+1−k−uiui+p+1−k−uQi−1,k−1+ui+p+1−k−uiu−uiQi,k−1,k=2,⋯,p
下面用數學歸納法證明
Qi,k=ui+p+1−k−uiVi,k−1−Vi−1,k−1,k=1,⋯,p.
當k=1時,Qi,k=ui+p+1−k−uiVi,k−1−Vi−1,k−1,於是有
Qi,k+1===ui+p−k−uiui+p−k−uQi−1,k+ui+p−k−uiu−uiQi,kui+p−k−uiui+p−k−uui+p−k−uiVi−1,k−1−Vi−2,k−1+ui+p−k−uiu−uiui+p+1−k−uiVi,k−1−Vi−1,k−1ui+p−k−ui1[ui+p−k−uiui+p−k−u(Vi−1,k−1−Vi−2,k−1)+ui+p+1−k−uiu−ui(Vi,k−1−Vi−1,k−1)].
又
Vi,k−Vi−1,k=====ui+p+1−k−uiui+p+1−k−uVi−1,k−1+ui+p+1−k−uiu−uiVi,k−1−ui+p−k−uiui+p−k−uVi−2,k−1−ui+p−k−uiu−uiVi−1,k−1(Vi−1,k−1+ui+p+1−k−uiui−uVi−1,k−1)−ui+p−k−uiu−uiVi−1,k−1+ui+p+1−k−uiu−uiVi,k−1−ui+p−k−uiui+p−k−uVi−2,k−1(Vi−1,k−1−ui+p−k−uiu−uiVi−1,k−1)+ui+p+1−k−uiui−uVi−1,k−1+ui+p+1−k−uiu−uiVi,k−1−ui+p−k−uiui+p−k−uVi−2,k−1ui+p−k−uiui+p−k−uVi−1,k−1−ui+p+1−k−uiu−uiVi−1,k−1+ui+p+1−k−uiu−uiVi,k−1−ui+p−k−uiui+p−k−uVi−2,k−1ui+p−k−uiui+p−k−u(Vi−1,k−1−Vi−2,k−1)+ui+p+1−k−uiu−ui(Vi,k−1−Vi−1,k−1).
因此,可得
Qi,k+1=ui+p−k−uiVi,k−Vi−1,k.
證畢。
利用上面的結果,可以得到
P′(u)=pi=j−p+k∑jNi,p−k(u)Qi,k=pQj,p=puj+1−ujVj,p−1−Vj−1,p−1.
De Boor遞推算法求B樣條曲線的二階導矢
設u∈[uj,uj+1),則
P′′(u)=====(P(u))′=(i=j−p∑jNi,p′(u)Vi)′(i=j−p∑jui+p−uipViNi,p−1(u)−i=j−p∑jui+p+1−ui+1pViNi+1,p−1(u))′i=j−p∑jui+p−uipViNi,p−1′(u)−i=j−p∑jui+p+1−ui+1pViNi+1,p−1′(u)i=j−p∑jui+p−uipVi(ui+p−1−uip−1Ni,p−2(u)−ui+p−ui+1p−1Ni+1,p−2(u))−i=j−p∑jui+p+1−ui+1pVi(ui+p−ui+1p−1Ni+1,p−2(u)−ui+p+1−ui+2p−1Ni+2,p−2(u))p(p−1)i=j−p∑j[ui+p−uiViui+p−1−ui1Ni,p−2(u)−ui+p−uiViui+p−ui+11Ni+1,p−2(u)−ui+p+1−ui+1Viui+p−ui+11Ni+1,p−2(u)+ui+p+1−ui+1Viui+p+1−ui+21Ni+2,p−2(u)].
於是
p(p−1)P′′(u)====i=j−p∑j(ui+p−ui)(ui+p−1−ui)ViNi,p−2(u)−i=j−p∑j(ui+p−ui)(ui+p−ui+1)ViNi+1,p−2(u)−i=j−p∑j(ui+p+1−ui+1)(ui+p−ui+1)ViNi+1,p−2(u)+i=j−p∑j(ui+p+1−ui+1)(ui+p+1−ui+2)ViNi+2,p−2(u)i=j−p+2∑j(ui+p−ui)(ui+p−1−ui)ViNi,p−2(u)−i=j−p+1∑j+1(ui+p−1−ui−1)(ui+p−1−ui)Vi−1Ni,p−2(u)−i=j−p+1∑j+1(ui+p−ui)(ui+p−1−ui)Vi−1Ni,p−2(u)+i=j−p+2∑j+2(ui+p−1−ui−1)(ui+p−1−ui)Vi−2Ni,p−2(u)i=j−p+2∑j(ui+p−ui)(ui+p−1−ui)ViNi,p−2(u)−i=j−p+2∑j(ui+p−1−ui−1)(ui+p−1−ui)Vi−1Ni,p−2(u)−i=j−p+2∑j(ui+p−ui)(ui+p−1−ui)Vi−1Ni,p−2(u)+i=j−p+2∑j(ui+p−1−ui−1)(ui+p−1−ui)Vi−2Ni,p−2(u)i=j−p+2∑jNi,p−2(u)[(ui+p−ui)(ui+p−1−ui)Vi−Vi−1−(ui+p−1−ui−1)(ui+p−1−ui)Vi−1−Vi−2].
記
Δ1===i=j−p+2∑j(ui+p−ui)(ui+p−1−ui)Vi−Vi−1Ni,p−2(u)i=j−p+2∑j(ui+p−ui)(ui+p−1−ui)Vi−Vi−1(ui+p−2−uiu−uiNi,p−3(u)+ui+p−1−ui+1ui+p−1−uNi+1,p−3(u))i=j−p+3∑j(ui+p−ui)(ui+p−1−ui)Vi−Vi−1ui+p−2−uiu−uiNi,p−3(u)+i=j−p+3∑j(ui+p−1−ui−1)(ui+p−2−ui−1)Vi−1−Vi−2ui+p−2−uiui+p−2−uNi,p−3(u).
Δ2===i=j−p+2∑j(ui+p−1−ui−1)(ui+p−1−ui)Vi−1−Vi−2Ni,p−2(u)i=j−p+2∑j(ui+p−1−ui−1)(ui+p−1−ui)Vi−1−Vi−2(ui+p−2−uiu−uiNi,p−3(u)+ui+p−1−ui+1ui+p−1−uNi+1,p−3(u))i=j−p+3∑j(ui+p−1−ui−1)(ui+p−1−ui)Vi−1−Vi−2ui+p−2−uiu−uiNi,p−3(u)+i=j−p+3∑j(ui+p−2−ui−2)(ui+p−2−ui−1)Vi−2−Vi−3ui+p−2−uiui+p−2−uNi,p−3(u).
因此,得到
p(p−1)P′′(u)==i=j−p+2∑jNi,p−2(u)[(ui+p−ui)(ui+p−1−ui)Vi−Vi−1−(ui+p−1−ui−1)(ui+p−1−ui)Vi−1−Vi−2]i=j−p+3∑jNi,p−3(u)⋅{[(ui+p−ui)(ui+p−1−ui)Vi−Vi−1−(ui+p−1−ui−1)(ui+p−1−ui)Vi−1−Vi−2]ui+p−2−uiu−ui+[(ui+p−1−ui−1)(ui+p−2−ui−1)Vi−1−Vi−2−(ui+p−2−ui−2)(ui+p−2−ui−1)Vi−2−Vi−3]ui+p−2−uiui+p−2−u}.
令
Qi,k=⎩⎪⎨⎪⎧(ui+p−ui)(ui+p−1−ui)Vi−Vi−1−(ui+p−1−ui−1)(ui+p−1−ui)Vi−1−Vi−2,k=2ui+p+1−k−uiui+p+1−k−uQi−1,k−1+ui+p+1−k−uiu−uiQi,k−1,k=3,⋯,p
下面用數學歸納法證明
Qi,k=(ui+p+2−k−ui)(ui+p+1−k−ui)Vi,k−2−Vi−1,k−2−(ui+p+1−k−ui−1)(ui+p+1−k−ui)Vi−1,k−2−Vi−2,k−2,k=2,⋯,p
當k=2時,
Qi,k=(ui+p+2−k−ui)(ui+p+1−k−ui)Vi,k−2−Vi−1,k−2−(ui+p+1−k−ui−1)(ui+p+1−k−ui)Vi−1,k−2−Vi−2,k−2.
於是有
Qi,k+1===ui+p−k−uiui+p−k−uQi−1,k+ui+p−k−uiu−uiQi,kui+p−k−uiui+p−k−u[(ui+p+1−k−ui−1)(ui+p−k−ui−1)Vi−1,k−2−Vi−2,k−2−(ui+p−k−ui−2)(ui+p−k−ui−1)Vi−2,k−2−Vi−3,k−2]+ui+p−k−uiu−ui[(ui+p+2−k−ui)(ui+p+1−k−ui)Vi,k−2−Vi−1,k−2−(ui+p+1−k−ui−1)(ui+p+1−k−ui)Vi−1,k−2−Vi−2,k−2](ui+p−k−ui)(ui+p+1−k−ui−1)(ui+p−k−ui−1)ui+p−k−u(Vi−1,k−2−Vi−2,k−2)−(ui+p−k−ui)(ui+p−k−ui−2)(ui+p−k−ui−1)ui+p−k−u(Vi−2,k−2−Vi−3,k−2)+(ui+p−k−ui)(ui+p+2−k−ui)(ui+p+1−k−ui)u−ui(Vi,k−2−Vi−1,k−2)−(ui+p−k−ui)(ui+p+1−k−ui−1)(ui+p+1−k−ui)u−ui(Vi−1,k−2−Vi−2,k−2).
記
Δ====(ui+p+1−k−ui)(ui+p−k−ui)Vi,k−1−Vi−1,k−1−(ui+p−k−ui−1)(ui+p−k−ui)Vi−1,k−1−Vi−2,k−1(ui+p+1−k−ui)(ui+p−k−ui)Vi,k−1−(ui+p+1−k−ui)(ui+p−k−ui)Vi−1,k−1−(ui+p−k−ui−1)(ui+p−k−ui)Vi−1,k−1+(ui+p−k−ui−1)(ui+p−k−ui)Vi−2,k−1(ui+p+1−k−ui)(ui+p−k−ui)1[ui+p+2−k−uiui+p+2−k−uVi−1,k−2+ui+p+2−k−uiu−uiVi,k−2]−(ui+p+1−k−ui)(ui+p−k−ui)1[ui+p+1−k−ui−1ui+p+1−k−uVi−2,k−2+ui+p+1−k−ui−1u−ui−1Vi−1,k−2]−(ui+p−k−ui−1)(ui+p−k−ui)1[ui+p+1−k−ui−1ui+p+1−k−uVi−2,k−2+ui+p+1−k−ui−1u−ui−1Vi−1,k−2]+(ui+p−k−ui−1)(ui+p−k−ui)1[ui+p−k−ui−2ui+p−k−uVi−3,k−2+ui+p−k−ui−2u−ui−2Vi−2,k−2](ui+p+1−k−ui)(ui+p−k−ui)(ui+p+2−k−ui)ui+p+2−k−uVi−1,k−2+(ui+p+1−k−ui)(ui+p−k−ui)(ui+p+2−k−ui)u−uiVi,k−2−(ui+p+1−k−ui)(ui+p−k−ui)(ui+p+1−k−ui−1)ui+p+1−k−uVi−2,k−2−(ui+p+1−k−ui)(ui+p−k−ui)(ui+p+1−k−ui−1)u−ui−1Vi−1,k−2−(ui+p−k−ui−1)(ui+p−k−ui)(ui+p+1−k−ui−1)ui+p+1−k−uVi−2,k−2−(ui+p−k−ui−1)(ui+p−k−ui)(ui+p+1−k−ui−1)u−ui−1Vi−1,k−2+(ui+p−k−ui−1)(ui+p−k−ui)(ui+p−k−ui−2)ui+p−k−uVi−3,k−2+(ui+p−k−ui−1)(ui+p−k−ui)(ui+p−k−ui−2)u−ui−2Vi−2,k−2.
令Qi,k+1−Δ=α1Vi,k−2+α2Vi−1,k−2+α3Vi−2,k−2+α4Vi−3,k−2,則有
α1==(ui+p−k−ui)(ui+p+2−k−ui)(ui+p+1−k−ui)u−ui−(ui+p+1−k−ui)(ui+p−k−ui)(ui+p+2−k−ui)u−ui0,
α2====(ui+p−k−ui)(ui+p+1−k−ui−1)(ui+p−k−ui−1)ui+p−k−u−(ui+p−k−ui)(ui+p+2−k−ui)(ui+p+1−k−ui)u−ui−(ui+p−k−ui)(ui+p+1−k−ui−1)(ui+p+1−k−ui)u−ui−(ui+p+1−k−ui)(ui+p−k−ui)(ui+p+2−k−ui)ui+p+2−k−u+(ui+p+1−k−ui)(ui+p−k−ui)(ui+p+1−k−ui−1)u−ui−1+(ui+p−k−ui−1)(ui+p−k−ui)(ui+p+1−k−ui−1)u−ui−1−(ui+p+1−k−ui)(ui+p−k−ui)1+(ui+p+1−k−ui−1)(ui+p−k−ui)1−(ui+p−k−ui)(ui+p+1−k−ui−1)(ui+p+1−k−ui)u−ui+(ui+p+1−k−ui)(ui+p−k−ui)(ui+p+1−k−ui−1)u−ui−1+ui+p+1−k−ui+p+1−k(ui+p+1−k−ui)(ui+p−k−ui)(ui+p+1−k−ui−1)u−ui+p+1−k−u+ui+(ui+p+1−k−ui−1)(ui+p−k−ui)10,
α3====−(ui+p−k−ui)(ui+p+1−k−ui−1)(ui+p−k−ui−1)ui+p−k−u−(ui+p−k−ui)(ui+p−k−ui−2)(ui+p−k−ui−1)ui+p−k−u+(ui+p−k−ui)(ui+p+1−k−ui−1)(ui+p+1−k−ui)u−ui+(ui+p+1−k−ui)(ui+p−k−ui)(ui+p+1−k−ui−1)ui+p+1−k−u+(ui+p−k−ui−1)(ui+p−k−ui)(ui+p+1−k−ui−1)ui+p+1−k−u−(ui+p−k−ui−1)(ui+p−k−ui)(ui+p−k−ui−2)u−ui−2−(ui+p−k−ui)(ui+p−k−ui−1)1+(ui+p−k−ui)(ui+p+1−k−ui−1)1−(ui+p−k−ui)(ui+p+1−k−ui−1)(ui+p−k−ui−1)ui+p−k−u+(ui+p−k−ui−1)(ui+p−k−ui)(ui+p+1−k−ui−1)ui+p+1−k−u−ui−1+ui−1(ui+p−k−ui−1)(ui+p−k−ui)(ui+p+1−k−ui−1)ui−1−u−ui+p−k+u+(ui+p−k−ui)(ui+p+1−k−ui−1)10,
α4==(ui+p−k−ui)(ui+p−k−ui−2)(ui+p−k−ui−1)ui+p−k−u−(ui+p−k−ui−1)(ui+p−k−ui)(ui+p−k−ui−2)ui+p−k−u0.
從而,得到
Qi,k+1=Δ=(ui+p+1−k−ui)(ui+p−k−ui)Vi,k−1−Vi−1,k−1−(ui+p−k−ui−1)(ui+p−k−ui)Vi−1,k−1−Vi−2,k−1.
證畢。
利用上面的結果,可以得到
P′′(u)==p(p−1)i=j−p+k∑jNi,p−k(u)Qi,k=p(p−1)Qj,pp(p−1)[(uj+2−uj)(uj+1−uj)Vj,p−2−Vj−1,p−2−(uj+1−uj−1)(uj+1−uj)Vj−1,p−2−Vj−2,p−2].
De Boor遞推算法求NURBS 曲線上的點
設u∈[uj,uj+1),則
P(u)=Vj,p.
其中
Vi,k=ωi,k=αi,k=⎩⎨⎧Vi,k=0(1−αi,k)ωi,kωi−1,k−1Vi−1,k−1+αi,kωi,kωi,k−1Vi,k−1,k=1,⋯,p,i=j−p+k,⋯,j{ωi,k=0(1−αi,k)ωi−1,k−1+αi,kωi,k−1,k=1,⋯,p,i=j−p+k,⋯,jui+p+1−k−uiu−ui,k=1,⋯,p,i=j−p+k,⋯,j
De Boor遞推算法求NURBS 曲線的一階導矢
設u∈[uj,uj+1),則
P′(u)=uj+1−ujpωj,p2ωj−1,p−1ωj,p−1(Vj,p−1−Vj−1,p−1).
其中
Vi,k=ωi,k=αi,k=⎩⎨⎧Vi,k=0(1−αi,k)ωi,kωi−1,k−1Vi−1,k−1+αi,kωi,kωi,k−1Vi,k−1,k=1,⋯,p,i=j−p+k,⋯,j{ωi,k=0(1−αi,k)ωi−1,k−1+αi,kωi,k−1,k=1,⋯,p,i=j−p+k,⋯,jui+p+1−k−uiu−ui,k=1,⋯,p,i=j−p+k,⋯,j
萊布尼茨公式求NURBS曲線的高階導矢
令P(u)=i=0∑nNi,p(u)ωii=0∑nNi,p(u)ωiVi=W(u)A(u),利用求積的高階導的萊布尼茨公式,得到
P(k)(u)=W(u)A(k)(u)−i=1∑kCkiW(i)(u)P(k−i)(u).
特別的,
P′(u)=P′′(u)==W(u)A′(u)−W′(u)P(u)=W2(u)A′(u)W(u)−A(u)W′(u),W(u)A′′(u)−2W′(u)P′(u)−W′′(u)P(u)W2(u)A′′(u)W(u)−2W′(u)W(u)P′(u)−W′′(u)A(u).