一、NURBS曲线基础

各位同学,今天咱们来聊聊NURBS曲线。说实话,我刚入行那会儿,看到NURBS这几个字母就头疼。后来做了几个高速加工项目,才真正体会到它的价值。

NURBS曲线,全称是非均匀有理B样条。说白了,它就是B样条的升级版。为什么要升级?因为B样条没法精确表示圆锥曲线——比如圆弧、椭圆这些。你想想看,数控加工里圆弧太常见了,B样条只能近似,精度不够。

我个人习惯把NURBS曲线拆成三块来理解:基函数、控制点、节点向量。这三块搞明白了,后面插补算法就顺了。

1.1 B样条基函数

基函数是NURBS的数学根基。它决定了控制点怎么影响曲线形状。我建议用递推公式来理解,别死记硬背。

先看零阶基函数:

N_{i,0}(u) = 1, 如果 u_i ≤ u < u_{i+1}
N_{i,0}(u) = 0, 其他情况

这个很简单,就是个开关函数。在某个区间内为1,外面为0。

高阶基函数靠递推:

N_{i,p}(u) = (u - u_i)/(u_{i+p} - u_i) * N_{i,p-1}(u) 
           + (u_{i+p+1} - u)/(u_{i+p+1} - u_{i+1}) * N_{i+1,p-1}(u)

看着复杂?其实就两个要点:

  • 每个高阶基函数由两个低阶基函数组合而成
  • 组合系数是u的线性函数

我在项目中遇到过一个问题:基函数计算太慢,影响实时性。后来发现可以预计算非零区间,运行时只算有效部分,速度提升了好几倍。

小技巧:基函数只在局部区间非零。这个性质叫"局部支撑性"。你移动一个控制点,只会影响曲线的一部分。这在调试时特别有用。

1.2 控制点与权因子

控制点就是曲线上的"把手"。你拽着控制点拖,曲线就会跟着变形。但NURBS比B样条多了一个东西——权因子。

权因子是什么?我打个比方:每个控制点都有个"吸引力"。权因子越大,曲线就越靠近这个控制点。权因子为0时,这个控制点完全失效。

数学表达式是这样的:

C(u) = Σ_{i=0}^{n} N_{i,p}(u) * w_i * P_i / Σ_{i=0}^{n} N_{i,p}(u) * w_i

其中w_i就是权因子。注意看分母,它是个归一化因子。为什么要归一化?因为权因子改变了基函数的"总和",不归一化的话曲线会飘。

权因子取值 效果
w_i = 1 退化为B样条
w_i > 1 曲线被拉向控制点
w_i < 1 曲线远离控制点
w_i = 0 控制点失效

注意:权因子不能为负数。我曾经见过一个案例,有人误设了负权因子,结果曲线出现了奇怪的扭曲。调试了整整两天才发现问题。

1.3 节点向量

节点向量是NURBS的"时间轴"。它定义了参数u的取值范围和分段方式。

节点向量长这样:

U = {u_0, u_1, u_2, ..., u_m}

其中m = n + p + 1。n是控制点数量减1,p是次数。

节点向量分三种:

  • 均匀节点:节点等距分布。简单,但曲线两端行为不太好控制。
  • 准均匀节点:两端重复p+1次,中间均匀。这是最常用的,曲线首尾会经过控制点。
  • 非均匀节点:节点任意分布。灵活性最高,可以精确表示圆锥曲线。

我记得有个项目要做圆弧插补,一开始用的均匀节点,怎么调都调不出完美圆弧。后来换成非均匀节点,配合合适的权因子,一次就搞定了。

核心要点:节点向量的重复度决定了曲线的连续性。重复度每增加1,连续性降低1阶。比如三次B样条,内部节点重复度为1时是C2连续,重复度为2时是C1连续。

1.4 知识体系结构图

下面这张图展示了NURBS曲线基础的核心逻辑关系:

NURBS曲线基础 - 知识体系 NURBS曲线 B样条基函数 控制点与权因子 节点向量 递推公式 局部支撑 连续性 几何意义 权因子 归一化 均匀节点 准均匀 非均匀 三者共同决定NURBS曲线形状 基函数提供数学框架 · 控制点提供几何约束 · 节点向量提供参数化

这张图把NURBS曲线基础的核心逻辑串起来了。你看,基函数、控制点与权因子、节点向量,三者缺一不可。基函数提供数学框架,控制点提供几何约束,节点向量提供参数化方式。

搞懂了这些,后面讲插补算法时你就知道每一步在干什么了。嗯,今天就到这里,下节课咱们聊NURBS曲线的求值算法。


公众号:蓝海资料掘金营,微信deep3321