3. B样条基函数:德布尔-考克斯递推公式、基函数性质、基函数图形可视化
各位同学,咱们今天聊B样条曲线最核心的零件——基函数。
说实话,我刚入行那会儿,看到B样条的公式就头大。一堆下标、一堆递推,感觉像在看天书。后来在项目里被坑过几次,才真正明白这东西到底在干什么。今天我就把当年踩过的坑和总结的经验,一次性讲清楚。
3.1 德布尔-考克斯递推公式
B样条基函数怎么算?靠的就是德布尔-考克斯递推公式。说白了,这是一个从0阶开始,一层一层往上搭积木的过程。
先看0阶基函数,最简单:
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到节点距离的比例。
3.2 基函数的重要性质
这些性质不是摆设,是咱们做轨迹规划时天天用的。我挑几个最关键的讲。
3.2.1 局部支撑性
每个基函数只在局部区间非零。具体来说,N_{i,p}(u)只在[u_i, u_{i+p+1})这个区间里不为0。这意味着什么?你移动一个控制点,只影响曲线的一小段。我在做机械臂轨迹微调时,这个性质帮了大忙——改一个点,不用重新算整条曲线。
3.2.2 权性
对于任意u,所有同阶基函数加起来等于1:
∑ N_{i,p}(u) = 1
这个性质保证了曲线的凸包性。说白了,曲线不会跑出控制点围成的多边形外面。做避障规划时,我经常利用这个性质做快速碰撞检测。
3.2.3 连续性
在节点处,p阶B样条基函数具有C^{p-1}连续性。举个例子,3阶(p=3)的基函数,在节点处二阶导数连续。这对轨迹规划太重要了——加速度连续意味着运动平滑,不会产生冲击。
3.3 基函数图形可视化
光讲公式太抽象,咱们画个图看看。下面是一个3阶B样条基函数的可视化,节点向量取[0,0,0,1,2,3,4,4,4]。
从图上你能看出什么?
- 每个基函数只覆盖4个节点区间(因为p=3,覆盖p+1=4个区间)。这就是局部支撑性的直观体现。
- 在节点处,基函数值不为0。注意看u=1,2,3这些位置,曲线是连续的。
- 所有曲线加起来等于1。你可以在任意u位置竖着切一刀,看看各条曲线的高度之和是不是1。
核心要点:
- 德布尔-考克斯递推:从0阶开始,逐阶向上计算
- 局部支撑性:每个基函数只影响局部区域
- 权性:所有基函数之和恒为1
- 连续性:p阶基函数具有C^{p-1}连续性
- 实际应用:做轨迹规划至少用3阶,保证加速度连续
好了,基函数这块就讲到这里。记住,基函数是B样条曲线的灵魂。你把它搞明白了,后面控制点、节点向量、曲线求值这些,都是水到渠成的事。
公众号:蓝海资料掘金营,微信deep3321