12月学习进度7/31——计算机图形学期末准备04B样条曲线及其基函数的定义

Posted fu_GAGA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12月学习进度7/31——计算机图形学期末准备04B样条曲线及其基函数的定义相关的知识,希望对你有一定的参考价值。

参考讲解视频

B样条曲线产生背景

1. Bezier曲线的不足:

  • 给定 n + 1 n+1 n+1 个控制点,则曲线的阶数 n n n 确定
    顶点数很多时,多项式阶数大,导数阶数大,曲线有很多极值点(导数为0的点),曲线产生振荡现象。
  • 使用低阶的Bezier曲线拼接较复杂(需要满足一定的连续性)
  • Bezier曲线不能做局部修改

“牵一发而动全身”:修改单个控制点,会改变整条曲线的形状
【原因分析】
B e r n s t e i n Bernstein Bernstein多项式 B j n ( t ) B^n_j(t) Bjn(t) 对称,并且满足在 t ∈ ( 0 , 1 ) t∈(0,1) t(0,1) 时均不为0
(函数值不为0的区间通常叫做该函数的支撑区间
对称性如下图所示:

Bezier曲线:

b n ( t ) = ∑ j n b j ∗ B j n ( t ) b_n(t)=\\sum_j^nb_j*B^n_j(t) bn(t)=jnbjBjn(t)

相当于 B e r n s t e i n Bernstein Bernstein多项式对控制点 b j b_j bj 的加权和
由于 B j n ( t ) ≠ 0 B^n_j(t)≠0 Bjn(t)=0 (在整个区间 [ 0 , 1 ] [0,1] [0,1] 上有支撑),所以每个控制点的改变都会影响整条Bezier曲线

2.B样条曲线的引入

图中7个混合函数 N i , 2 N_i,2 Ni,2 ( i = 0 , 1 , 2...6 ) (i=0,1,2...6) (i=0,1,2...6)
每个混合函数的支撑区间只是 [ 0 , 1 ] [0,1] [0,1] 的一部分,例:

  • N 1 , 2 N_1,2 N1,2 的支撑区间是 [ 0 , 0.5 ] [0,0.5] [0,0.5]
  • N 2 , 2 N_2,2 N2,2 的支撑区间是 [ 0 , 0.5 ] [0,0.5] [0,0.5]
  • N 4 , 2 N_4,2 N4,2的支撑区间是 [ 0.5 , 1 ] [0.5,1] [0.5,1]

B样条曲线提出:保留全部Bezier曲线优点的同时,克服了其缺点
样条spline:分段连续多项式!)

整条曲线用一个完整的表达形式(但内在的量是低阶一段一段的)

【Example:三次样条
现有 n + 1 n+1 n+1 个点,每两个点之间构造一个多项式,则有 n n n 个小区间

  • 每个小区间构造一个三次多项式
  • n段三次多项式拼接在一起
  • 段与段之间要两次连续
  1. 采用Bezier曲线:5个点,则构造出4次多项式
  2. 采用三次样条:5个点,四段三次多项式,段间两次连续

3. B样条定义 vs Bezier曲线定义

B样条曲线数学表达式:

P ( u ) = ∑ j = 0 n P i ∗ B i , k ( u ) P(u)=\\sum_j=0^nP_i*B_i,k(u) P(u)=j=0nPiBi,k(u)
( u ∈ [ u k − 1 , u n + 1 ] ) (u∈[u_k-1,u_n+1]) (u[uk1,un+1])

Bezier曲线数学表达式:

P ( u ) = ∑ j = 0 n P i ∗ B i , n ( u ) P(u)=\\sum_j=0^nP_i*B_i,n(u) P(u)=j=0nPiBi,n(u)
( u ∈ [ 0 , 1 ] ) (u∈[0,1]) (u[0,1])

不同之处

(1)B样条基函数与控制点个数 n + 1 n+1 n+1(或阶数 n n n)无关

  • B i , k ( u ) B_i,k(u) Bi,k(u) k k k 阶( k − 1 k-1 k1 次)B样条基函数 k ∈ [ 2 , n + 1 ] k∈[2,n+1] k[2,n+1]

(2)两者参数 u u u的取值范围不同:

  • u ∈ [ u k − 1 , u n + 1 ] u∈[u_k-1,u_n+1] u[uk1,un+1]

4. B样条基函数定义 —— de Boor-Cox递推定义

【idea】
构造一种递推公式,由0次构造1次,1次构造2次,2次构造3次…最终构造出k阶(k-1次)的B样条基函数

并且约定 0 / 0 = 0 0/0=0 0/0=0
k阶的B样条基函数由两个k-1阶的B样条基函数线性组合而成

要确定第 i i i k k k 阶B样条 B i , k ( u ) B_i,k(u) Bi,k(u)
要用到 u i , u i + 1 , . . . , u i + k u_i,u_i+1,...,u_i+k ui,ui+1,...,ui+k k + 1 k+1 k+1 个节点

[ u i , u i + k ] [u_i,u_i+k] [ui,ui+k] 称为 B i , k ( u ) B_i,k(u) Bi,k(u)支撑区间

【推导举例】
1阶0次B样条:

2阶1次B样条:

3阶2次B样条:

【问题Question】

No.1:对 n + 1 n+1 n+1 个顶点, k k k 阶B样条曲线需要多少个节点向量 u i u_i ui 与之匹配