样条曲线定义:
C
(
u
)
=
∑
i
=
0
n
N
i
,
p
(
u
)
P
i
C(u)=\sum^n_{i=0}N_{i,p}(u)P_i
C(u)=i=0∑nNi,p(u)Pi
基函数的导数为:
d
N
i
,
p
(
u
)
d
u
=
N
i
,
p
′
(
u
)
=
p
N
i
,
p
−
1
(
u
)
u
i
+
p
−
u
i
−
p
N
i
+
1
,
p
−
1
(
u
)
u
i
+
p
+
1
−
u
i
+
1
\frac{dN_{i,p}(u)}{du}=N^{'}_{i,p}(u)=\frac{pN_{i,p-1}(u)}{u_{i+p}-u_i}-\frac{pN_{i+1,p-1}(u)}{u_{i+p+1}-u_{i+1}}
dudNi,p(u)=Ni,p′(u)=ui+p−uipNi,p−1(u)−ui+p+1−ui+1pNi+1,p−1(u)
则:
C
′
(
u
)
=
∑
i
=
0
n
−
1
N
i
+
1
,
p
−
1
(
u
)
Q
i
Q
i
=
p
(
P
i
+
1
−
P
i
)
u
i
+
p
+
1
−
u
i
+
1
C^{'}(u)=\sum^{n-1}_{i=0}N_{i+1,p-1}(u)Q_i\\ Q_i=\frac{p(P_{i+1}-P_i)}{u_{i+p+1}-u_{i+1}}
C′(u)=i=0∑n−1Ni+1,p−1(u)QiQi=ui+p+1−ui+1p(Pi+1−Pi)
所以,B-Spline曲线的导数也是B-Spline曲线,其阶数相对于原始样条曲线减一,控制顶点为Qi.
几个要点:
导数的曲线节点向量是原始节点向量去除第一个和最后一个节点构成的.
控制顶点需要重新计算,且个数是原始控制顶点个数减一.
将新生成的导数样条曲线带入到 deboor递推算法中,即可计算相应导数值.