三次B样条曲线在参数 u 处分割为两段的方式
几何建模中的基本操作。该过程通过就是将一条三次B样条曲线在给定参数值 u 处分割为两段新的B样条曲线,节点插入算法构建,最终得到两条独立的B样条曲线,分别对应原曲线在 [u₀, u] 和 [u, uₘ] 上的部分。
1. 基本定义
- 曲线次数:p = 3(三次)
- 控制点:P₀, P₁, ..., Pₙ
- 节点向量:U = {u₀, u₁, ..., uₘ},其中 m = n + p + 1
- 分割参数:u ∈ [uₖ, uₖ₊₁),位于第 k 个节点区间
- 目标:将原曲线 C(u) 分割为:
- 左段曲线 C₁(u),定义在 [u₀, u]
- 右段曲线 C₂(u),定义在 [u, uₘ]
每段仍为三次B样条,具有新的控制点和节点向量。
2. 方法:节点插入法(Knot Insertion)
通过在节点向量中插入节点 u,直到其重复度达到 p = 3,使得 u 成为一个“断点”,从而可自然分割曲线。
插入一次节点 u 的控制点更新公式
设原控制点为 Pᵢ,插入 u 后生成新控制点 Qᵢ。
对于 i = k - p + 1 到 k: Qᵢ = αᵢ × Pᵢ + (1 - αᵢ) × Pᵢ₋₁
其中: αᵢ = (u - uᵢ) / (uᵢ₊ₚ - uᵢ)
注:当分母为0时,定义 αᵢ = 1。
插入一次后,控制点数增加1,节点向量变为: U' = {u₀, ..., uₖ, u, uₖ₊₁, ..., uₘ}
重复此过程,共插入3次(因 p = 3),即可使 u 的重复度达到3。
3. 分割后两段曲线的控制点
假设经过3次节点插入后,新增了3个控制点,原控制点序列被更新。
设最终在参数 u 处对应的控制点为:
- 左段终点:Pₗ = C(u)
- 新控制点序列中,与 u 相关的三个点趋于重合(用于形成角点)
左段曲线 C₁(u)(对应 [u₀, u])
- 控制点:Q₀, Q₁, ..., Qₖ, Pₗ, Pₗ, Pₗ
(共 k+4 个点,末尾重复3次以闭合曲线) - 节点向量:U₁ = {u₀, u₁, ..., uₖ, u, u, u, u}
(u 重复4次,符合三次B样条端点条件)
右段曲线 C₂(u)(对应 [u, uₘ])
- 控制点:Pₗ, Pₗ, Pₗ, R₀, R₁, ..., Rₙ₋ₖ
(开头重复3次) - 节点向量:U₂ = {u, u, u, u, uₖ₊₁, ..., uₘ}
(u 作为起点,重复4次)
说明:Pₗ = C(u) 是分割点处的曲线值,可通过 de Boor 算法计算。
4. de Boor 算法计算 C(u)
若需显式计算分割点位置 C(u),可使用 de Boor 算法:
设 u ∈ [uₖ, uₖ₊₁)
初始化: dᵢ = Pᵢ₋₃, for i = k - 2, k - 1, ..., k + 3
递推(r = 1 to 3): dᵢ⁽ʳ⁾ = (1 - αᵢ) × dᵢ₋₁⁽ʳ⁻¹⁾ + αᵢ × dᵢ⁽ʳ⁻¹⁾
其中: αᵢ = (u - uᵢ) / (uᵢ₊₃ - uᵢ)
最终: C(u) = dₖ⁽³⁾
5. 分割后曲线性质
| 性质 | 说明 |
|---|---|
| 连续性 | 左右两段在 u 处保持 C² 连续(若未插入足够节点);插入3次后为 G⁰ 连续(位置连续) |
| 形状保持 | 分割不改变原曲线形状 |
| 控制多边形 | 新控制点通过线性插值得到,几何意义明确 |
6. 使用步骤总结
- 确定分割参数 u 所在的节点区间 [uₖ, uₖ₊₁)
- 使用节点插入公式,将 u 插入3次(p = 3)
- 每次插入更新控制点:Qᵢ = αᵢ × Pᵢ + (1 - αᵢ) × Pᵢ₋₁
- 得到新控制点序列和节点向量
- 提取左段和右段的控制点与节点向量
- 构造两段独立的三次B样条曲线
浙公网安备 33010602011771号