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

OCCT 中 B-spline 的 Degree 与 Order:真正区别是什么? #

(已包含:为什么 Cox–de Boor 必然导致 p+1p+1 个控制点参与)


1. 数学中的 B-spline:只有 Degree #

B-spline 曲线定义为:

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

其中:

  • pp:degree(次数)
  • Ni,p(u)N_{i,p}(u):p 次 B-spline 基函数
  • PiP_i:控制点
  • U=u0,,umU={u_0,\dots,u_m}:节点向量

✔️ 数学核心 #

p=degreep = \text{degree}

所有性质由 pp 决定:

  • 每段是 pp 次多项式
  • 局部支撑区间:[ui,ui+p+1)[u_i, u_{i+p+1})
  • 连续性:CpkC^{p-k}
  • 局部控制:p+1p+1 个控制点

2. OCCT 中的 Order #

在 OCCT 中:

curve->Degree();  // p
curve->Order();   // p + 1

关系:

Order=Degree+1\text{Order} = \text{Degree} + 1
概念数学OCCT
Degreepp多项式次数
Orderp+1p+1局部控制点数量

3. 为什么 OCCT 需要 Order? #

因为工程上必须明确:

一个局部曲线段到底由多少个控制点参与计算?


关键事实 #

对于 pp 次 B-spline:

C(u)=Ni,p(u)PiC(u)=\sum N_{i,p}(u) P_i

在任意 uu

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


4. ⭐ 核心问题:为什么 Cox–de Boor 必然导致 p+1p+1#

这一节是关键理解点。


4.1 从 0 次基函数开始 #

0 次基函数定义:

Ni,0(u)={1,uiu<ui+1 0,otherwiseN_{i,0}(u)= \begin{cases} 1, & u_i \le u < u_{i+1}\ 0, & \text{otherwise} \end{cases}

重要结论: #

  • 每个 Ni,0N_{i,0} 只覆盖一个 knot span
  • 一个 span → 1 个控制点参与

所以:

order0=1\text{order}_0 = 1

4.2 Cox–de Boor 递归结构 #

高阶基函数:

Ni,p(u)==========uuiui+puiNi,p1(u)+ui+p+1uui+p+1ui+1Ni+1,p1(u)N_{i,p}(u) ========== \frac{u-u_i}{u_{i+p}-u_i}N_{i,p-1}(u) + \frac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u)

关键点(非常重要) #

每次递归:

  • 一个 pp 次基函数
  • 由两个 (p1)(p-1) 次基函数组合

👉 这意味着:

支撑区间逐层向外扩展 1 个 knot span


4.3 支撑区间的增长规律 #

从 0 次开始:

  • p=0p=0 → 1 个 span
  • p=1p=1 → 2 个 spans
  • p=2p=2 → 3 个 spans
  • p=3p=3 → 4 个 spans

因此:

support length=p+1 knot spans\text{support length} = p+1 \text{ knot spans}

4.4 ⭐ 关键推论 #

一个 pp 次基函数:

  • 覆盖 p+1p+1 个 knot spans
  • 每个 span 对应一个“局部控制影响单元”

因此:

Ni,p(u)0涉及 p+1 个控制点N_{i,p}(u) \neq 0 \Rightarrow \text{涉及 } p+1 \text{ 个控制点}

5. ⭐ 为什么这等价于“p+1 个控制点参与” #

这是最核心一步。


曲线定义: #

C(u)=Ni,p(u)PiC(u)=\sum N_{i,p}(u)P_i

在某个局部区间: #

只有这些基函数非零:

Nip,p(u),,Ni,p(u)N_{i-p,p}(u), \dots, N_{i,p}(u)

数量:

p+1p+1

因此曲线局部变为: #

C(u)=k=ipiNk,p(u)PkC(u)=\sum_{k=i-p}^{i} N_{k,p}(u)P_k

✔️ 结论: #

在任意 knot span 上,B-spline 曲线永远只由 p+1p+1 个控制点决定


6. 滑动窗口本质(最直观理解) #

p=3p=3

P0 P1 P2 P3 P4 P5 ...

[ P0 P1 P2 P3 ]
    [ P1 P2 P3 P4 ]
        [ P2 P3 P4 P5 ]

每个窗口: #

  • 4 个控制点
  • 生成一个局部曲线段
  • 相邻窗口重叠 3 个点

👉 这个窗口大小就是:

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

7. 为什么数学教材不写 order? #

因为:

所有性质已经由 pp 决定:

  • support = p+1p+1
  • continuity = CpkC^{p-k}
  • local control = p+1p+1

所以:

order 是“工程视角的重命名”,不是新的数学结构


8. OCCT vs 数学的本质差异 #

视角重点
数学表达结构
OCCT计算结构

数学: #

p所有性质p \Rightarrow 所有性质

工程: #

porder=p+1局部窗口p \Rightarrow order = p+1 \Rightarrow 局部窗口

9. 完整统一结论 #

Cox–de Boor 递归使得每升高一阶,基函数的支撑区间增加 1 个 knot span,因此 p 次基函数覆盖 p+1 个 span,而每个 span 对应一个控制点参与,从而必然导致局部曲线由 p+1 个控制点共同决定。


10. 最终总结(最重要一句) #

Order=p+1=局部控制点数量=Cox–de Boor 递归结构的自然结果\boxed{ \text{Order} = p+1 = \text{局部控制点数量} = \text{Cox–de Boor 递归结构的自然结果} }
目录