B-Spline 中 Multiplicity(重数)的完整理解:它到底在控制什么? #
在学习 B-spline 时,一个很容易困惑的概念是:
multiplicity(重数)到底是什么?它为什么会影响曲线的“光滑程度”?
如果只记结论(比如 Cp−k),往往会很抽象。
这篇文章尝试从“结构 + 直觉 + 数学作用”三个层面把它彻底讲清楚。
1. Multiplicity 是什么? #
在 B-spline 中:
- knot vector 是参数序列
- multiplicity 是“某个 knot 出现的次数”
数学定义 #
如果某个 knot 是:
ui它在 knot vector 中出现 k 次,则:
k=multiplicity of ui
举例 #
情况 1:没有重复 #
U=0, 0.3, 0.6, 1所有 multiplicity 都是:
k=1
情况 2:有重复 #
U=0, 0, 0, 0.3, 0.6, 1则:
- 0 的 multiplicity = 3
- 其他为 1
2. Multiplicity 的直觉意义(非常重要) #
可以用一句话理解:
multiplicity = 这个 knot “被卡住的程度”
更直观理解 #
B-spline 曲线像一条“弹性软管”,knot 是“钉子”。
| 概念 | 类比 |
|---|
| knot | 钉子位置 |
| multiplicity | 钉子钉了几颗 |
| degree | 软管柔软程度 |
👉 钉子越多:
3. Multiplicity 真正控制的是什么? #
核心结论:
multiplicity 控制的是:连续性(smoothness)
4. 核心公式(必须理解) #
B-spline 在 knot 处的连续性为:
Cp−k其中:
- p = degree(次数)
- k = multiplicity(重数)
5. 这个公式是什么意思? #
我们用三次 B-spline(p=3)举例:
情况 1:k = 1(普通情况) #
C3−1=C2👉 非常光滑:
情况 2:k = 2 #
C3−2=C1👉 开始“有折感”:
情况 3:k = 3 #
C3−3=C0👉 只保证不断开:
情况 4:k = 4 #
C3−4👉 不连续(断开)
6. 为什么“重复”会降低光滑性? #
这是 multiplicity 最核心的问题。
B-spline 本质 #
B-spline 曲线是:
C(u)=∑Ni,p(u)Pi它的光滑性来自:
相邻片段之间“共享导数信息”
multiplicity 做了什么? #
👉 它减少了“共享信息的数量”
可以理解为: #
- knot 是拼接点
- multiplicity 是“切断共享约束的次数”
结果: #
共享越少 → 拼接越不平滑
7. 一个更本质的理解(关键) #
✔️ B-spline 拼接需要满足: #
✔️ 这些条件来自“自由度匹配” #
p 次多项式:
p+1 个自由度
✔️ multiplicity 的作用: #
每增加一次 multiplicity,就减少一个可匹配的导数条件
8. Multiplicity vs Continuity 的关系 #
我们可以总结成表:
| multiplicity k | 连续性 |
|---|
| 1 | Cp−1(最光滑) |
| 2 | Cp−2 |
| p | C0(只有位置连续) |
| p+1 | 不连续 |
9. clamped B-spline 的本质(非常重要) #
你之前学过:
clamped = 首尾节点重复 p+1 次
也就是: #
k=p+1
代入公式: #
Cp−(p+1)=C−1👉 不要求连续性
但为什么还能经过端点? #
因为:
端点是“边界条件”,不是拼接点
10. OCCT 中 Multiplicities() #
在 OCCT 里:
curve->Multiplicities();
返回:
k0,k1,…,km
和 Knot 一一对应: #
| Knot | Multiplicity |
|---|
| ui | ki |
11. Multiplicity 的工程意义(OCCT 视角) #
它控制三件事:
① 曲线是否光滑 #
② 是否出现折点(sharp corner) #
③ 是否断开 #
12. 一个完整例子 #
三次 B-spline:
p=3
knot vector: #
U=0,0,0,0, 0.5, 1,1,1,1
multiplicities: #
结果: #
- 起点:clamped(强约束)
- 中间:平滑
- 端点:clamped
13. 最核心统一理解(非常重要) #
可以这样记:
✔️ 三个核心量: #
| 概念 | 含义 |
|---|
| Knot | 参数位置 |
| Multiplicity | “连续性破坏程度” |
| Degree | 曲线柔软程度 |
✔️ 核心关系: #
Cp−k
14. 一句话总结(最重要) #
Multiplicity 控制 B-spline 在某个 knot 处“破坏了多少连续性”,从而决定曲线是平滑过渡、折角还是断开。
15. 最终直觉模型 #
可以记成:
knot = 拼接点
multiplicity = 钉子数量(约束强度)
degree = 曲线柔软程度
16. 最终一句话总结 #
multiplicity 越大 → 共享导数越少 → 曲线越不光滑