一、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曲线的求值算法。
公众号:蓝海资料掘金营,微信deep3321