本文整理自西安交通大学软件学院祝继华老师的计算机图形学课件,请勿转载
B样条曲线与曲面
de Boor-Cox递推定义
两个特殊观察
- 基函数 N i , k ( t ) N_{i,k}(t) Ni,k(t)在 [ t i , t i + k ) [t_i,t_{i+k}) [ti,ti+k)上非零;
- 在任何一个节点区间 [ t i , t i + 1 ) [t_i,t_{i+1}) [ti,ti+1), 最多有k个(k-1)次基函数非零: N i − k + 1 , k ( t ) , N i − k + 2 , k ( t ) , . . . , N i , k ( t ) N_{i-k+1,k}(t),N_{i-k+2,k}(t),...,N_{i,k}(t) Ni−k+1,k(t),Ni−k+2,k(t),...,Ni,k(t)
性质
节点数目计算
如果节点数目是(m+1),函数的阶数是k,控制点的个数是(n+1),则m=(n+k)
基函数 N i , k ( t ) N_{i,k}(t) Ni,k(t)在 [ t i , t i + k ) [t_i,t_{i+k}) [ti,ti+k)上非零。
例题:
五个控制顶点的三次B样条曲线由几个节点构成?
解:
n = 4 , k = 3+1=4
m=n+k=8
节点数=m+1=9
局部性
需要注意定义域!!!
- k阶B样条曲线上参数为 t ∈ [ t i , t i + 1 ] t\in[t_i,t_{i+1}] t∈[ti,ti+1]的一点至多与k个控制定点 P j ( j = i − k + 1 , . . . , k ) P_j(j=i-k+1,...,k) Pj(j=i−k+1,...,k)有关,与其他控制顶点无关
-
P
i
P_i
Pi只影响再区间
[
t
i
,
t
i
+
k
)
[t_i,t_{i+k})
[ti,ti+k)上的曲线
P
(
t
)
P(t)
P(t)
- 基函数 N i , k ( t ) N_{i,k}(t) Ni,k(t)在 [ t i , t i + k ) [t_i,t_{i+k}) [ti,ti+k)上非零
- 基函数 N i , k ( t ) N_{i,k}(t) Ni,k(t)在区间 [ t i , t i + k ) [t_i,t_{i+k}) [ti,ti+k)上都是次数不高于(k-1)的多项式
例:改变一条以P0,P1,…,P9为控制顶顶点的4阶B样条曲线的一个顶点P5,有几段曲线的形状会改变
移动曲线的第i个控制顶点Pi,至多影响定义在区间 [ t i , t i + k ) [t_i,t_{i+k}) [ti,ti+k)上的那部分曲线的形状,因此移动控制顶点Pi,曲线在 [ t 5 , t 9 ) [t_5,t_{9}) [t5,t9)区间会发生变化,即改变的了4段曲线的形状。
开曲线定义域
有k个基函数的支持,定义域是 [ t k − 1 , t n + 1 ] [t_{k-1},t_{n+1}] [tk−1,tn+1]
举例
- 使用节点向量 T = { 0 , 0.25 , 0.5 , 0.75 , 1 } T=\{0,0.25,0.5,0.75,1\} T={0,0.25,0.5,0.75,1},如果基函数是2阶的(即k=2),那么有三个基函数 N 0 , 2 ( t ) , N 1 , 2 ( t ) N_{0,2}(t),N_{1,2}(t) N0,2(t),N1,2(t)和 N 2 , 2 ( t ) N_{2,2}(t) N2,2(t);
- 第一个和最后一个节点区间只有一个非零基函数,而第二和第三节点区间(即 [ 0.25 , 0.5 ) [0.25,0.5) [0.25,0.5)和 [ 0.5 , 0.75 ) [0.5,0.75) [0.5,0.75))有两个非零基函数。
- 节点区间 [ 0 , 0.25 ) [0,0.25) [0,0.25)和 [ 0.75 , 1 ) [0.75,1) [0.75,1)没有基函数的“完全支持”。
- 一般来说,区间 [ t 0 , t k − 1 ) [t_0,t_{k-1}) [t0,tk−1)和 [ t n + 1 , u n + k ] [t_{n+1},u_{n+k}] [tn+1,un+k]不会有基函数的“完全支持”,当B样条曲线是开曲线时被忽略。
尽管在两端的节点区间没有被利用,B样条曲线仍然是由所有控制点定义的
变差缩减性
设平面内 n+1 个控制顶点构成B样条曲线 P(t) 的特征多边形。在该平面内的任意一条直线与 P(t) 的交点个数不多于该直线和特征多边形的交点个数:
造型灵活性
可构造直线段、尖点、切线等情况
- 直线段:只要4点共线,此时定义在 P i , P i + 1 , P i + 2 , P i + 1 P_i,P_{i+1},P_{i+2},P_{i+1} Pi,Pi+1,Pi+2,Pi+1的曲线为直线
- 通过某一点:只要使 P i , P i + 1 , P i + 2 P_i,P_{i+1},P_{i+2} Pi,Pi+1,Pi+2重合;尖点也可通过三重节点的方法得到
- 相切:为了使曲线和某一直线L相切,只要取 P i , P i + 1 , P i + 2 P_i,P_{i+1},P_{i+2} Pi,Pi+1,Pi+2位于L上及 t i + 3 t_{i+3} ti+3的重数不大于2
例子:
Q,Q1,Q2,S1,S2是平面上的5个点。请设计一条均匀三次B样条曲线,使曲线经过这5个点,且满足如下设计要求:
- 在Q1,Q2点与Q Q1,Q Q2相切;
- 分别在Q,Q1和Q,Q2间生成一段直线段;
- 在Q是一尖点。
呃,说实话,前面也不知道是在干啥,但是根据上面结论可以做出来后面的几幅图