日期:2026年3月14日标签:Computer Graphics

📘 B-Spline 核心理解:滑动窗口与有效区间 #


1. B-spline 基本定义 #

B-spline 曲线定义为:

C(u)=i=0nNi,p(u),PiC(u) = \sum_{i=0}^{n} N_{i,p}(u),P_i

其中:

  • PiP_i:控制点
  • Ni,p(u)N_{i,p}(u):p 次 B-spline 基函数
  • uu:参数

2. 核心结构:滑动窗口(Order) #

2.1 Order 定义 #

order=p+1\text{order} = p + 1

2.2 本质含义 #

在任意参数 uu 处:

只有 p+1p+1 个控制点同时参与计算

即:

C(u) 由 p+1 个 Pi 加权得到C(u) \text{ 由 } p+1 \text{ 个 } P_i \text{ 加权得到}

2.3 滑动窗口形式 #

例如 p=3p=3

order=4\text{order} = 4

控制点参与形式:

[Pi,Pi+1,Pi+2,Pi+3][P_i, P_{i+1}, P_{i+2}, P_{i+3}]

窗口随 uu 移动:

[P0P1P2P3][P1P2P3P4][P2P3P4P5][P_0 P_1 P_2 P_3] \rightarrow [P_1 P_2 P_3 P_4] \rightarrow [P_2 P_3 P_4 P_5]

3. 为什么是 p+1 个控制点? #

关键来自 Cox–de Boor 支撑性质:

Ni,p(u)0u[ui,;ui+p+1)N_{i,p}(u) \neq 0 \Rightarrow u \in [u_i,; u_{i+p+1})

因此:

  • 每个基函数覆盖 p+1 个 knot interval
  • 多个基函数重叠形成窗口

结果:

同时非零的 basis 数量=p+1\text{同时非零的 basis 数量} = p+1

4. knot vector 示例 #

设:

U=0,0,0,0,;0.3,;0.6,;1,1,1,1U = {0,0,0,0,;0.3,;0.6,;1,1,1,1}

5. 每个控制点的支撑区间 #

根据:

supp(Ni,p)=[ui,;ui+p+1)\mathrm{supp}(N_{i,p}) = [u_i,; u_{i+p+1})

p = 3 时: #

P0: #

[u0,;u4]=[0,0.3][ u_0,; u_4 ] = [0, 0.3]

P1: #

[u1,;u5]=[0,0.6][ u_1,; u_5 ] = [0, 0.6]

P2: #

[u2,;u6]=[0,1][ u_2,; u_6 ] = [0, 1]

P3: #

[u3,;u7]=[0,1][ u_3,; u_7 ] = [0, 1]

P4: #

[u4,;u8]=[0.3,1][ u_4,; u_8 ] = [0.3, 1]

6. 为什么会形成“滑动窗口” #

因为:

  • 每个 Ni,p(u)N_{i,p}(u) 只在局部区间非零
  • 不同 basis 区间重叠

因此在每个 uu

;p+1 个 basis 同时非零\exists ; p+1 \text{ 个 basis 同时非零}

7. 有效区间的来源 #


7.1 左端分析 #

u<upu < u_p 时:

例如 u=0u=0

  • basis 未形成完整 overlap
  • 非零 basis 数量 < p+1

7.2 右端分析 #

u>umpu > u_{m-p} 时:

  • sliding window 滑出 knot 范围
  • overlap 结构消失

8. 有效区间定义 #

因此稳定结构区间为:

u[up,;ump]u \in [u_p,; u_{m-p}]

9. 为什么这个区间重要? #

在该区间内满足:

9.1 完整 overlap: #

i1[Ni,p(u)0]=p+1\sum_{i} \mathbf{1}[N_{i,p}(u) \neq 0] = p+1

9.2 partition of unity: #

iNi,p(u)=1\sum_{i} N_{i,p}(u) = 1

9.3 convex combination: #

C(u)=iNi,p(u)PiC(u) = \sum_{i} N_{i,p}(u) P_i

10. 两端 vs 中间 #


10.1 中间区间 #

u[up,;ump]u \in [u_p,; u_{m-p}]

特点:

  • p+1 个 basis overlap
  • 凸组合成立
  • 曲线稳定

10.2 两端区间 #

例如 u=0u=0

C(0)=P0C(0)=P_0

特点:

  • overlap 退化
  • basis collapse
  • 不形成完整窗口结构

11. 最终统一解释 #


B-spline 本质结构: #

① knot 决定时间轴 #

② basis 决定局部支撑 #

③ order 决定窗口大小 #


合起来: #

B-spline=滑动窗口上的局部加权平均系统\text{B-spline} = \text{滑动窗口上的局部加权平均系统}

12. 核心结论 #

[up,;ump] 是滑动窗口结构完整成立的稳定区间\boxed{ [u_p,; u_{m-p}] \text{ 是滑动窗口结构完整成立的稳定区间} }

13. 一句话总结 #

B-spline 的有效区间不是“函数定义区间”,而是“p+1 个 basis function 能够完整重叠并形成 convex combination 的区域”。

目录