三次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. 使用步骤总结

  1. 确定分割参数 u 所在的节点区间 [uₖ, uₖ₊₁)
  2. 使用节点插入公式,将 u 插入3次(p = 3)
  3. 每次插入更新控制点:Qᵢ = αᵢ × Pᵢ + (1 - αᵢ) × Pᵢ₋₁
  4. 得到新控制点序列和节点向量
  5. 提取左段和右段的控制点与节点向量
  6. 构造两段独立的三次B样条曲线
posted on 2025-10-28 16:17  blfbuaa  阅读(3)  评论(0)    收藏  举报