B样条基函数
B样条基函数的定义
由de Boor和Cox分别导出B样条基函数的递推定义,B样条基函数可以表示为
N
i
,
0
(
u
)
=
{
1
,
u
i
⩽
u
<
u
i
+
1
0
,
其
他
N
i
,
p
(
u
)
=
u
−
u
i
u
i
+
p
−
u
i
N
i
,
p
−
1
(
u
)
+
u
i
+
p
+
1
−
u
u
i
+
p
+
1
−
u
i
+
1
N
i
+
1
,
p
−
1
(
u
)
,
p
>
0
\begin{aligned} N_{i,0}(u) &= \begin{cases} 1 ,\quad u_i \leqslant u < u_{i+1} \\ 0 ,\quad 其他 \end{cases} \\ N_{i,p}(u) &= \dfrac{u-u_i}{u_{i+p}-u_i}N_{i,p-1}(u)+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) ,\quad p > 0 \end{aligned}
Ni,0(u)Ni,p(u)={1,ui⩽u<ui+10,其他=ui+p−uiu−uiNi,p−1(u)+ui+p+1−ui+1ui+p+1−uNi+1,p−1(u),p>0
并约定
0
/
0
=
0
0/0=0
0/0=0。式中
p
p
p表示B样条的幂次,
u
u
u为节点,下标
i
i
i为B样条的序号。
上式表明,任意 p p p次B样条基函数可由两个相邻的 p − 1 p-1 p−1次B样条基函数的线性组合构成。
B样条基函数的性质
- 如果 u ∉ [ u i , u i + p + 1 ) u\notin\left[u_i,u_{i+p+1}\right) u∈/[ui,ui+p+1),则 N i , p ( u ) = 0 N_{i,p}(u)=0 Ni,p(u)=0。
- 当 u ∈ [ u i , u i + 1 ) u\in\left[u_i,u_{i+1}\right) u∈[ui,ui+1)时, ∑ j = i − p i N j , p ( u ) = 1 \sum\limits_{j=i-p}^{i}N_{j,p}(u)=1 j=i−p∑iNj,p(u)=1。
B样条基函数的导数
B样条基函数的求导公式为
N
i
,
p
′
(
u
)
=
p
u
i
+
p
−
u
i
N
i
,
p
−
1
(
u
)
−
p
u
i
+
p
+
1
−
u
i
+
1
N
i
+
1
,
p
−
1
(
u
)
.
N^{'}_{i,p}(u)=\dfrac{p}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{p}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u).
Ni,p′(u)=ui+p−uipNi,p−1(u)−ui+p+1−ui+1pNi+1,p−1(u).
下面通过对
p
p
p利用数学归纳法来证明求导公式。当
p
=
1
p=1
p=1时,
N
i
,
p
−
1
(
u
)
N_{i,p-1}(u)
Ni,p−1(u) 和
N
i
+
1
,
p
−
1
(
u
)
N_{i+1,p-1}(u)
Ni+1,p−1(u) 在每个节点区间内或者为
0
0
0,或者为
1
1
1,因此
N
i
,
p
′
(
u
)
N^{'}_{i,p}(u)
Ni,p′(u) 等于
1
u
i
+
1
−
u
i
\dfrac{1}{u_{i+1}-u_i}
ui+1−ui1或者
−
1
u
i
+
2
−
u
i
+
1
-\dfrac{1}{u_{i+2}-u_{i+1}}
−ui+2−ui+11。我们假设当
p
−
1
(
p
>
1
)
p-1(p>1)
p−1(p>1)时求导公式成立。根据求导法则
(
f
g
)
′
=
f
′
g
+
f
g
′
(fg)^{'}=f^{'}g+fg^{'}
(fg)′=f′g+fg′,对基函数
N
i
,
p
(
u
)
=
u
−
u
i
u
i
+
p
−
u
i
N
i
,
p
−
1
(
u
)
+
u
i
+
p
+
1
−
u
u
i
+
p
+
1
−
u
i
+
1
N
i
+
1
,
p
−
1
(
u
)
N_{i,p}(u)=\dfrac{u-u_i}{u_{i+p}-u_i}N_{i,p-1}(u)+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u)
Ni,p(u)=ui+p−uiu−uiNi,p−1(u)+ui+p+1−ui+1ui+p+1−uNi+1,p−1(u)
求导,得到
N
i
,
p
′
(
u
)
=
1
u
i
+
p
−
u
i
N
i
,
p
−
1
(
u
)
+
u
−
u
i
u
i
+
p
−
u
i
N
i
,
p
−
1
′
(
u
)
−
1
u
i
+
p
+
1
−
u
i
+
1
N
i
+
1
,
p
−
1
(
u
)
+
u
i
+
p
+
1
−
u
u
i
+
p
+
1
−
u
i
+
1
N
i
+
1
,
p
−
1
′
(
u
)
=
1
u
i
+
p
−
u
i
N
i
,
p
−
1
(
u
)
−
1
u
i
+
p
+
1
−
u
i
+
1
N
i
+
1
,
p
−
1
(
u
)
+
u
−
u
i
u
i
+
p
−
u
i
(
p
−
1
u
i
+
p
−
1
−
u
i
N
i
,
p
−
2
(
u
)
−
p
−
1
u
i
+
p
−
u
i
+
1
N
i
+
1
,
p
−
2
(
u
)
)
+
u
i
+
p
+
1
−
u
u
i
+
p
+
1
−
u
i
+
1
(
p
−
1
u
i
+
p
−
u
i
+
1
N
i
+
1
,
p
−
2
(
u
)
−
p
−
1
u
i
+
p
+
1
−
u
i
+
2
N
i
+
2
,
p
−
2
(
u
)
)
=
1
u
i
+
p
−
u
i
N
i
,
p
−
1
(
u
)
−
1
u
i
+
p
+
1
−
u
i
+
1
N
i
+
1
,
p
−
1
(
u
)
+
p
−
1
u
i
+
p
−
u
i
u
−
u
i
u
i
+
p
−
1
−
u
i
N
i
,
p
−
2
(
u
)
+
p
−
1
u
i
+
p
−
u
i
+
1
(
u
i
+
p
+
1
−
u
u
i
+
p
+
1
−
u
i
+
1
−
u
−
u
i
u
i
+
p
−
u
i
)
N
i
+
1
,
p
−
2
(
u
)
−
p
−
1
u
i
+
p
+
1
−
u
i
+
1
u
i
+
p
+
1
−
u
u
i
+
p
+
1
−
u
i
+
2
N
i
+
2
,
p
−
2
(
u
)
.
\begin{aligned} N^{'}_{i,p}(u)=& \dfrac{1}{u_{i+p}-u_i}N_{i,p-1}(u)+\dfrac{u-u_i}{u_{i+p}-u_i}N^{'}_{i,p-1}(u) \\ &-\dfrac{1}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u)+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}N^{'}_{i+1,p-1}(u) \\ =& \dfrac{1}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{1}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) \\ &+\dfrac{u-u_i}{u_{i+p}-u_i}\left(\dfrac{p-1}{u_{i+p-1}-u_i}N_{i,p-2}(u)-\dfrac{p-1}{u_{i+p}-u_{i+1}}N_{i+1,p-2}(u)\right) \\ &+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}\left(\dfrac{p-1}{u_{i+p}-u_{i+1}}N_{i+1,p-2}(u)-\dfrac{p-1}{u_{i+p+1}-u_{i+2}}N_{i+2,p-2}(u)\right) \\ =& \dfrac{1}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{1}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) \\ &+\dfrac{p-1}{u_{i+p}-u_i}\dfrac{u-u_i}{u_{i+p-1}-u_i}N_{i,p-2}(u) \\ &+\dfrac{p-1}{u_{i+p}-u_{i+1}}\left(\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}-\dfrac{u-u_i}{u_{i+p}-u_i}\right)N_{i+1,p-2}(u) \\ &-\dfrac{p-1}{u_{i+p+1}-u_{i+1}}\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+2}}N_{i+2,p-2}(u). \end{aligned}
Ni,p′(u)===ui+p−ui1Ni,p−1(u)+ui+p−uiu−uiNi,p−1′(u)−ui+p+1−ui+11Ni+1,p−1(u)+ui+p+1−ui+1ui+p+1−uNi+1,p−1′(u)ui+p−ui1Ni,p−1(u)−ui+p+1−ui+11Ni+1,p−1(u)+ui+p−uiu−ui(ui+p−1−uip−1Ni,p−2(u)−ui+p−ui+1p−1Ni+1,p−2(u))+ui+p+1−ui+1ui+p+1−u(ui+p−ui+1p−1Ni+1,p−2(u)−ui+p+1−ui+2p−1Ni+2,p−2(u))ui+p−ui1Ni,p−1(u)−ui+p+1−ui+11Ni+1,p−1(u)+ui+p−uip−1ui+p−1−uiu−uiNi,p−2(u)+ui+p−ui+1p−1(ui+p+1−ui+1ui+p+1−u−ui+p−uiu−ui)Ni+1,p−2(u)−ui+p+1−ui+1p−1ui+p+1−ui+2ui+p+1−uNi+2,p−2(u).
由于
u
i
+
p
+
1
−
u
u
i
+
p
+
1
−
u
i
+
1
−
u
−
u
i
u
i
+
p
−
u
i
=
−
1
+
u
i
+
p
+
1
−
u
u
i
+
p
+
1
−
u
i
+
1
+
1
−
u
−
u
i
u
i
+
p
−
u
i
=
−
u
i
+
p
+
1
−
u
i
+
1
u
i
+
p
+
1
−
u
i
+
1
+
u
i
+
p
+
1
−
u
u
i
+
p
+
1
−
u
i
+
1
+
u
i
+
p
−
u
i
u
i
+
p
−
u
i
−
u
−
u
i
u
i
+
p
−
u
i
=
u
i
+
p
−
u
u
i
+
p
−
u
i
−
u
−
u
i
+
1
u
i
+
p
+
1
−
u
i
+
1
.
\begin{aligned} \dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}-\dfrac{u-u_i}{u_{i+p}-u_i}=& -1+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}+1-\dfrac{u-u_i}{u_{i+p}-u_i} \\ =& -\dfrac{u_{i+p+1}-u_{i+1}}{u_{i+p+1}-u_{i+1}}+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}} \\ & +\dfrac{u_{i+p}-u_i}{u_{i+p}-u_i}-\dfrac{u-u_i}{u_{i+p}-u_i} \\ =&\dfrac{u_{i+p}-u}{u_{i+p}-u_i}-\dfrac{u-u_{i+1}}{u_{i+p+1}-u_{i+1}}. \end{aligned}
ui+p+1−ui+1ui+p+1−u−ui+p−uiu−ui===−1+ui+p+1−ui+1ui+p+1−u+1−ui+p−uiu−ui−ui+p+1−ui+1ui+p+1−ui+1+ui+p+1−ui+1ui+p+1−u+ui+p−uiui+p−ui−ui+p−uiu−uiui+p−uiui+p−u−ui+p+1−ui+1u−ui+1.
于是得到
N
i
,
p
′
(
u
)
=
1
u
i
+
p
−
u
i
N
i
,
p
−
1
(
u
)
−
1
u
i
+
p
+
1
−
u
i
+
1
N
i
+
1
,
p
−
1
(
u
)
+
p
−
1
u
i
+
p
−
u
i
(
u
−
u
i
u
i
+
p
−
1
−
u
i
N
i
,
p
−
2
(
u
)
+
u
i
+
p
−
u
u
i
+
p
−
u
i
+
1
N
i
+
1
,
p
−
2
(
u
)
)
−
p
−
1
u
i
+
p
+
1
−
u
i
+
1
(
u
−
u
i
+
1
u
i
+
p
−
u
i
+
1
N
i
+
1
,
p
−
2
(
u
)
+
u
i
+
p
+
1
−
u
u
i
+
p
+
1
−
u
i
+
2
N
i
+
2
,
p
−
2
(
u
)
)
=
1
u
i
+
p
−
u
i
N
i
,
p
−
1
(
u
)
−
1
u
i
+
p
+
1
−
u
i
+
1
N
i
+
1
,
p
−
1
(
u
)
+
p
−
1
u
i
+
p
−
u
i
N
i
,
p
−
1
(
u
)
−
p
−
1
u
i
+
p
+
1
−
u
i
+
1
N
i
+
1
,
p
−
1
(
u
)
=
p
u
i
+
p
−
u
i
N
i
,
p
−
1
(
u
)
−
p
u
i
+
p
+
1
−
u
i
+
1
N
i
+
1
,
p
−
1
(
u
)
.
\begin{aligned} N^{'}_{i,p}(u)=& \dfrac{1}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{1}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) \\ &+\dfrac{p-1}{u_{i+p}-u_i}\left(\dfrac{u-u_i}{u_{i+p-1}-u_i}N_{i,p-2}(u)+\dfrac{u_{i+p}-u}{u_{i+p}-u_{i+1}}N_{i+1,p-2}(u)\right) \\ &-\dfrac{p-1}{u_{i+p+1}-u_{i+1}}\left(\dfrac{u-u_{i+1}}{u_{i+p}-u_{i+1}}N_{i+1,p-2}(u)+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+2}}N_{i+2,p-2}(u)\right) \\ =& \dfrac{1}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{1}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) \\ &+\dfrac{p-1}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{p-1}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) \\ =& \dfrac{p}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{p}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u). \end{aligned}
Ni,p′(u)===ui+p−ui1Ni,p−1(u)−ui+p+1−ui+11Ni+1,p−1(u)+ui+p−uip−1(ui+p−1−uiu−uiNi,p−2(u)+ui+p−ui+1ui+p−uNi+1,p−2(u))−ui+p+1−ui+1p−1(ui+p−ui+1u−ui+1Ni+1,p−2(u)+ui+p+1−ui+2ui+p+1−uNi+2,p−2(u))ui+p−ui1Ni,p−1(u)−ui+p+1−ui+11Ni+1,p−1(u)+ui+p−uip−1Ni,p−1(u)−ui+p+1−ui+1p−1Ni+1,p−1(u)ui+p−uipNi,p−1(u)−ui+p+1−ui+1pNi+1,p−1(u).
证毕。
B样条曲线曲面
B样条曲线的定义
p
p
p次B样条曲线的定义为
P
(
u
)
=
∑
i
=
0
n
N
i
,
p
(
u
)
V
i
,
a
⩽
u
⩽
b
P\left(u\right)=\sum\limits_{i=0}^{n}N_{i,p}(u)V_i,\quad a\leqslant u\leqslant b
P(u)=i=0∑nNi,p(u)Vi,a⩽u⩽b
这里
{
V
i
}
\left\{V_i\right\}
{Vi}是控制点,
{
N
i
,
p
(
u
)
}
\left\{N_{i,p}(u)\right\}
{Ni,p(u)}是定义在非周期(并且非均匀)节点矢量
U
=
{
a
,
⋯
,
a
⏟
p
+
1
,
u
p
+
1
,
⋯
,
u
m
−
p
−
1
,
b
,
⋯
,
b
⏟
p
+
1
}
U = \left\{ \underbrace{a,\cdots,a}_{p+1}, u_{p+1},\cdots,u_{m-p-1}, \underbrace{b,\cdots,b}_{p+1} \right\}
U=⎩⎨⎧p+1
a,⋯,a,up+1,⋯,um−p−1,p+1
b,⋯,b⎭⎬⎫
(包含
m
+
1
m+1
m+1个节点)上的
p
p
p次B样条基函数。由
{
V
i
}
\left\{V_i\right\}
{Vi}构成的多边形称为控制多边形。
有理B样条曲线曲面
NURBS曲线的定义
一条
p
p
p次NURBS曲线的定义为
P
(
u
)
=
∑
i
=
0
n
N
i
,
p
(
u
)
ω
i
V
i
∑
i
=
0
n
N
i
,
p
(
u
)
ω
i
,
a
⩽
u
⩽
b
P\left(u\right)=\dfrac{\sum\limits_{i=0}^{n}N_{i,p}(u)\omega_iV_i}{\sum\limits_{i=0}^{n}N_{i,p}(u)\omega_i},\quad a\leqslant u\leqslant b
P(u)=i=0∑nNi,p(u)ωii=0∑nNi,p(u)ωiVi,a⩽u⩽b
这里
{
V
i
}
\left\{V_i\right\}
{Vi}是控制点(它们形成控制多边形),
{
ω
i
}
\left\{\omega_i\right\}
{ωi}是权因子,
{
N
i
,
p
(
u
)
}
\left\{N_{i,p}(u)\right\}
{Ni,p(u)}是定义在非周期(并且非均匀)节点矢量
U
U
U上的
p
p
p次B样条基函数。其中
U
=
{
a
,
⋯
,
a
⏟
p
+
1
,
u
p
+
1
,
⋯
,
u
m
−
p
−
1
,
b
,
⋯
,
b
⏟
p
+
1
}
U = \left\{ \underbrace{a,\cdots,a}_{p+1}, u_{p+1},\cdots,u_{m-p-1}, \underbrace{b,\cdots,b}_{p+1} \right\}
U=⎩⎨⎧p+1
a,⋯,a,up+1,⋯,um−p−1,p+1
b,⋯,b⎭⎬⎫