日期:2026年6月2日标签:Computer Graphics

从普通 B 样条曲线到 NURBS:权重、齐次坐标与透视投影 #

在学习 B 样条曲线之后,一个自然的问题是:

为什么还需要 NURBS?它和普通 B 样条有什么区别?

从公式上看,NURBS 似乎只是给每个控制点增加了一个权重;但从几何上看,它有一个更加深刻的解释:

NURBS 曲线可以看成高一维齐次空间中的普通 B 样条曲线,经过透视投影后得到的曲线。

理解这句话,基本就掌握了从普通 B 样条过渡到 NURBS 的核心。


1. 普通 B 样条曲线 #

一条 pp 次 B 样条曲线可以写成

C(u)=i=0nNi,p(u)Pi,\mathbf C(u) = \sum_{i=0}^{n} N_{i,p}(u)\mathbf P_i,

其中:

  • Pi\mathbf P_i 是控制点;
  • Ni,p(u)N_{i,p}(u)pp 次 B 样条基函数;
  • 节点向量决定基函数在参数域中的分布。

B 样条基函数满足单位分解性质:

i=0nNi,p(u)=1.\sum_{i=0}^{n}N_{i,p}(u)=1.

因此,曲线上的点可以理解为控制点的一个随参数变化的加权平均:

C(u)=N0,p(u)P0+N1,p(u)P1++Nn,p(u)Pn.\mathbf C(u) = N_{0,p}(u)\mathbf P_0 + N_{1,p}(u)\mathbf P_1 +\cdots+ N_{n,p}(u)\mathbf P_n.

普通 B 样条具有局部控制、凸包性、连续性可控等优点,非常适合自由曲线设计。

但它有一个重要限制:

普通多项式 B 样条不能精确表示圆、椭圆等圆锥曲线,只能进行近似。

这也是引入有理 B 样条的主要原因之一。


2. 从普通 B 样条到有理 B 样条 #

为了增强 B 样条的表示能力,我们为每个控制点 Pi\mathbf P_i 增加一个权重 wiw_i

有理 B 样条曲线定义为

C(u)=i=0nNi,p(u)wiPii=0nNi,p(u)wi.\mathbf C(u) = \frac{ \sum_{i=0}^{n} N_{i,p}(u)w_i\mathbf P_i }{ \sum_{i=0}^{n} N_{i,p}(u)w_i }.

定义有理基函数

Ri,p(u)=Ni,p(u)wij=0nNj,p(u)wj,R_{i,p}(u) = \frac{ N_{i,p}(u)w_i }{ \sum_{j=0}^{n} N_{j,p}(u)w_j },

曲线就可以重新写成

C(u)=i=0nRi,p(u)Pi.\mathbf C(u) = \sum_{i=0}^{n} R_{i,p}(u)\mathbf P_i.

它和普通 B 样条形式非常相似,只是原来的多项式基函数 Ni,p(u)N_{i,p}(u) 被有理基函数 Ri,p(u)R_{i,p}(u) 替代了。

有理基函数仍满足

i=0nRi,p(u)=1.\sum_{i=0}^{n}R_{i,p}(u)=1.

当所有权重都相等时,例如

wi=1,w_i=1,

Ri,p(u)=Ni,p(u),R_{i,p}(u)=N_{i,p}(u),

于是有理 B 样条退化为普通 B 样条。

因此可以说:

普通 B 样条是 NURBS 的特殊情况。


3. “有理”是什么意思 #

这里的“有理”来自英文 rational,指的是数学中的有理函数,而不是日常语言中的“合理”。

有理函数是两个多项式的比值,例如

f(u)=P(u)Q(u).f(u)=\frac{P(u)}{Q(u)}.

在每个节点区间内,B 样条基函数都是多项式,因此有理 B 样条的各个坐标可以表示为两个分段多项式的比值。

例如二维曲线可以写成

x(u)=iNi,p(u)wixiiNi,p(u)wi,x(u) = \frac{ \sum_iN_{i,p}(u)w_ix_i }{ \sum_iN_{i,p}(u)w_i }, y(u)=iNi,p(u)wiyiiNi,p(u)wi.y(u) = \frac{ \sum_iN_{i,p}(u)w_iy_i }{ \sum_iN_{i,p}(u)w_i }.

这就是“有理 B 样条”名称的来源。

分母

W(u)=iNi,p(u)wiW(u)=\sum_iN_{i,p}(u)w_i

使曲线不再只是分段多项式曲线,而成为分段有理函数曲线。


4. 权重的直观意义 #

权重可以直观地理解为控制点对曲线的“吸引力”。

在其他条件不变的情况下:

  • 增大 wiw_i,曲线通常会更加靠近控制点 Pi\mathbf P_i
  • 减小 wiw_i,曲线通常会远离控制点 Pi\mathbf P_i
  • 所有权重相等时,曲线就是普通 B 样条。

但权重并不是简单地移动控制点。

有理基函数为

Ri,p(u)=Ni,p(u)wijNj,p(u)wj.R_{i,p}(u) = \frac{ N_{i,p}(u)w_i }{ \sum_jN_{j,p}(u)w_j }.

改变某个权重 wiw_i 时,不仅会改变该控制点对应的分子,还会改变所有基函数共同使用的分母。

所以权重改变的是各个控制点之间的相对贡献。


5. 齐次坐标:理解 NURBS 的关键 #

仅仅把权重理解为“吸引力”还不够。NURBS 更本质的解释来自齐次坐标。

假设二维控制点为

Pi=(xi,yi),\mathbf P_i=(x_i,y_i),

它的权重为 wiw_i

把它提升到三维齐次空间中:

Piw=(wixi,;wiyi,;wi).\mathbf P_i^w = (w_ix_i,;w_iy_i,;w_i).

也可以写成

Piw=(wiPi,wi).\mathbf P_i^w=(w_i\mathbf P_i,w_i).

注意,齐次点

(wixi,wiyi,wi)(w_ix_i,w_iy_i,w_i)

投影回二维后仍然是

(wixiwi,wiyiwi)=(xi,yi).\left( \frac{w_ix_i}{w_i}, \frac{w_iy_i}{w_i} \right) = (x_i,y_i).

因此,权重不会改变控制点在原空间中的位置。

它只是为同一个点选择了一个不同的齐次表示。


6. 一个欧氏点对应齐次空间中的一条射线 #

在齐次空间中,同一个欧氏点有无数种表示。

例如二维点

(2,3)(2,3)

可以表示为

(2,3,1),(2,3,1),

也可以表示为

(4,6,2),(4,6,2),

或者

(20,30,10).(20,30,10).

因为投影后都有

(21,31)=(42,62)(2010,3010)(2,3).\left(\frac{2}{1},\frac{3}{1}\right) = \left(\frac{4}{2},\frac{6}{2}\right) \left(\frac{20}{10},\frac{30}{10}\right) (2,3).

从几何上说,这些齐次点都位于从原点出发的同一条射线上。

因此,一个欧氏点对应的并不是齐次空间中的单个点,而是一条射线:

λ(x,y,1).\lambda(x,y,1).

权重 wiw_i 的作用,就是在这条射线上选择齐次控制点

(wixi,wiyi,wi).(w_ix_i,w_iy_i,w_i).

wiw_i 增大时,该齐次控制点沿射线远离原点;当 wiw_i 减小时,它沿射线靠近原点。


7. 在齐次空间中构造普通 B 样条 #

有了齐次控制点之后,可以直接在高一维空间中构造一条普通 B 样条:

Cw(u)=iNi,p(u)Piw.\mathbf C^w(u) = \sum_iN_{i,p}(u)\mathbf P_i^w.

Piw=(wiPi,wi)\mathbf P_i^w=(w_i\mathbf P_i,w_i)

代入,得到

Cw(u)=iNi,p(u)(wiPi,wi).\mathbf C^w(u) = \sum_i N_{i,p}(u) (w_i\mathbf P_i,w_i).

逐坐标展开:

Cw(u)=(iNi,p(u)wiPi,;iNi,p(u)wi).\mathbf C^w(u) = \left( \sum_iN_{i,p}(u)w_i\mathbf P_i, ; \sum_iN_{i,p}(u)w_i \right).

记作

Cw(u)=(A(u),W(u)),\mathbf C^w(u) = \bigl(\mathbf A(u),W(u)\bigr),

其中

A(u)=iNi,p(u)wiPi,\mathbf A(u) = \sum_iN_{i,p}(u)w_i\mathbf P_i, W(u)=iNi,p(u)wi.W(u) = \sum_iN_{i,p}(u)w_i.

这里需要特别注意:

分母 iNi,p(u)wi\sum_iN_{i,p}(u)w_i 并不是人为添加的,它正是高维 B 样条曲线点的最后一个坐标。


8. 什么是透视投影 #

现在需要把齐次空间中的曲线点投影回原来的欧氏空间。

对于齐次点

(A,W),(\mathbf A,W),

投影结果为

AW.\frac{\mathbf A}{W}.

例如,从三维齐次空间投影到二维时:

(X,Y,W)(XW,YW).(X,Y,W) \longmapsto \left( \frac{X}{W}, \frac{Y}{W} \right).

从四维齐次空间投影到三维时:

(X,Y,Z,W)(XW,YW,ZW).(X,Y,Z,W) \longmapsto \left( \frac{X}{W}, \frac{Y}{W}, \frac{Z}{W} \right).

这个过程叫作透视投影,或者中心投影。


9. 透视投影的几何意义 #

考虑齐次点

(X,Y,W).(X,Y,W).

从原点出发,经过该点的射线可以写成

λ(X,Y,W).\lambda(X,Y,W).

我们希望找到这条射线与平面

W=1W=1

的交点。

交点的最后一个坐标必须满足

λW=1.\lambda W=1.

因此

λ=1W.\lambda=\frac{1}{W}.

代回射线方程:

λ(X,Y,W)=(XW,YW,1).\lambda(X,Y,W) = \left( \frac{X}{W}, \frac{Y}{W}, 1 \right).

去掉最后一个坐标 11,得到二维欧氏点

(XW,YW).\left( \frac{X}{W}, \frac{Y}{W} \right).

所以,“除以最后一个坐标”的几何意义是:

从原点向齐次点作一条射线,计算这条射线与平面 W=1W=1 的交点。

这与针孔相机中的透视投影具有完全相同的数学形式。


10. 为什么投影后出现 NURBS 的分母 #

齐次空间中的普通 B 样条为

Cw(u)=(iNi,p(u)wiPi,;iNi,p(u)wi).\mathbf C^w(u) = \left( \sum_iN_{i,p}(u)w_i\mathbf P_i, ; \sum_iN_{i,p}(u)w_i \right).

透视投影要求用前面的坐标除以最后一个坐标,因此

C(u)=iNi,p(u)wiPiiNi,p(u)wi.\mathbf C(u) = \frac{ \sum_iN_{i,p}(u)w_i\mathbf P_i }{ \sum_iN_{i,p}(u)w_i }.

这正是有理 B 样条曲线的定义。

因此,有理基函数中的分母

iNi,p(u)wi\sum_iN_{i,p}(u)w_i

来自齐次曲线在参数 uu 处的最后一个坐标。

它不是额外引入的归一化项,而是透视投影自然产生的结果。


11. 一个只有两个控制点的例子 #

为了直观理解这个过程,考虑一维中的两个控制点:

P0=0,P1=10.P_0=0,\qquad P_1=10.

在某个参数位置,两个基函数的值为

N0=0.5,N1=0.5.N_0=0.5,\qquad N_1=0.5.

控制点权重为

w0=1,w1=3.w_0=1,\qquad w_1=3.

11.1 提升到齐次空间 #

对于一维点 PiP_i,齐次控制点写成

Piw=(wiPi,wi).P_i^w=(w_iP_i,w_i).

因此

P_0^w = # (1\cdot0,1) (0,1), P_1^w = # (3\cdot10,3) (30,3).

虽然第二个齐次控制点是 (30,3)(30,3),但它投影回去仍然是

303=10.\frac{30}{3}=10.

所以权重没有改变控制点 P1P_1 的原始位置。


11.2 在齐次空间中进行普通插值 #

使用基函数值 N0=N1=0.5N_0=N_1=0.5

Cw=0.5P0w+0.5P1w.C^w = 0.5P_0^w+0.5P_1^w.

代入齐次控制点:

Cw=0.5(0,1)+0.5(30,3).C^w = 0.5(0,1)+0.5(30,3).

得到

Cw=(15,2).C^w=(15,2).

这只是齐次空间中两个控制点的普通中点。


11.3 投影回一维空间 #

从原点出发,经过点 (15,2)(15,2) 的射线为

λ(15,2).\lambda(15,2).

为了投影到直线

W=1,W=1,

需要令

2λ=1.2\lambda=1.

所以

λ=12.\lambda=\frac12.

投影点为

12(15,2)=(7.5,1).\frac12(15,2) = (7.5,1).

因此原来一维空间中的点是

C=7.5.C=7.5.

12. 为什么结果是 7.5,而不是 5 #

如果没有权重,两个控制点的普通平均为

0.50+0.510=5.0.5\cdot0+0.5\cdot10=5.

加入权重之后,有理基函数变为

R0=N0w0N0w0+N1w10.510.51+0.5314,R_0 = \frac{N_0w_0}{N_0w_0+N_1w_1} \frac{0.5\cdot1}{0.5\cdot1+0.5\cdot3} \frac14, R1=N1w1N0w0+N1w10.530.51+0.5334.R_1 = \frac{N_1w_1}{N_0w_0+N_1w_1} \frac{0.5\cdot3}{0.5\cdot1+0.5\cdot3} \frac34.

所以

C=R0P0+R1P1140+34107.5.C = R_0P_0+R_1P_1 \frac14\cdot0+\frac34\cdot10 7.5.

原本的系数是

0.5,0.5,0.5,\qquad 0.5,

经过权重和投影之后,有效系数变成了

0.25,0.75.0.25,\qquad 0.75.

因此结果更靠近权重较大的控制点 P1=10P_1=10

这就是“权重增大,曲线更靠近对应控制点”的数学原因。


13. 权重真正改变的是什么 #

权重不会直接改变欧氏空间中的控制点位置。

对于控制点 PiP_i,齐次表示为

Piw=(wiPi,wi).P_i^w=(w_iP_i,w_i).

无论 wiw_i 取什么正值,投影后都有

wiPiwi=Pi.\frac{w_iP_i}{w_i}=P_i.

权重真正改变的是控制点在齐次射线上的位置。

随后在齐次空间中进行 B 样条组合时,这些不同位置的齐次控制点会产生不同的高维曲线点。

最终,齐次曲线点所在射线的方向发生变化,投影回原空间后,曲线形状也随之变化。

因此可以这样理解:

权重不是直接移动控制点,而是改变高维插值结果的射线方向。


14. 为什么所有权重相等时会退化为普通 B 样条 #

假设所有控制点具有相同权重:

wi=w.w_i=w.

此时有理 B 样条为

C(u)=iNi,p(u)wPiiNi,p(u)w.\mathbf C(u) = \frac{ \sum_iN_{i,p}(u)w\mathbf P_i }{ \sum_iN_{i,p}(u)w }.

分子可以提出 ww

C(u)=wiNi,p(u)PiwiNi,p(u).\mathbf C(u) = \frac{ w\sum_iN_{i,p}(u)\mathbf P_i }{ w\sum_iN_{i,p}(u) }.

由于

iNi,p(u)=1,\sum_iN_{i,p}(u)=1,

所以

C(u)=iNi,p(u)Pi.\mathbf C(u) = \sum_iN_{i,p}(u)\mathbf P_i.

这就是普通 B 样条曲线。

从齐次空间看,所有权重相等意味着所有齐次控制点都位于同一个平面

W=wW=w

上。

此时投影只产生统一缩放,不会改变各控制点之间的相对贡献。


15. 为什么 NURBS 能精确表示圆 #

普通 B 样条是一类分段多项式曲线,而圆不能被有限次多项式参数方程精确表示。

NURBS 的坐标是有理函数,例如

x(u)=P(u)W(u),y(u)=Q(u)W(u).x(u)=\frac{P(u)}{W(u)}, \qquad y(u)=\frac{Q(u)}{W(u)}.

通过适当选择控制点和权重,有理二次曲线可以精确表示圆锥曲线,包括:

  • 圆;
  • 椭圆;
  • 抛物线;
  • 双曲线。

例如,一个单位圆的四分之一圆弧可以由三个二次有理 Bézier 控制点表示:

P0=(1,0),\mathbf P_0=(1,0), P1=(1,1),\mathbf P_1=(1,1), P2=(0,1),\mathbf P_2=(0,1),

其权重为

w0=1,w1=22,w2=1.w_0=1, \qquad w_1=\frac{\sqrt2}{2}, \qquad w_2=1.

普通二次 Bézier 曲线只能近似这段圆弧,而使用上述权重的有理二次 Bézier 曲线可以精确表示它。


16. 齐次坐标对算法的意义 #

齐次坐标不仅提供了一种几何解释,还带来了重要的计算优势。

在原空间中,NURBS 是一个分式:

C(u)=A(u)W(u).\mathbf C(u) = \frac{\mathbf A(u)}{W(u)}.

直接对有理函数进行各种运算通常比较复杂。

但在齐次空间中,它只是普通 B 样条:

Cw(u)=iNi,p(u)Piw.\mathbf C^w(u) = \sum_iN_{i,p}(u)\mathbf P_i^w.

因此,很多普通 B 样条算法都可以直接应用到齐次控制点上,例如:

  • de Boor 曲线求值;
  • 节点插入;
  • 曲线细分;
  • 升阶;
  • 曲线拼接;
  • 控制点变换。

计算完成后,再把结果投影回原空间即可。

这使得有理 B 样条在几何上更强大,同时又能复用普通 B 样条的大量理论和算法。


17. 从有理 B 样条到 NURBS #

NURBS 是 Non-Uniform Rational B-Spline 的缩写,即:

Non-Uniform Rational B-Spline.\text{Non-Uniform Rational B-Spline}.

它包含四个部分。

Non-Uniform:非均匀 #

节点向量不要求等间距,节点还可以重复。例如:

U=0,0,0,0.3,0.7,1,1,1.U={0,0,0,0.3,0.7,1,1,1}.

“非均匀”描述的是节点向量,而不是控制点分布。

Rational:有理 #

曲线坐标是分段多项式之比,并且控制点带有权重。

B-Spline:B 样条 #

曲线仍然由 B 样条基函数构造,具有局部控制、连续性可控等特征。

因此,NURBS 可以看成普通 B 样条的完整扩展:

NURBS=非均匀节点向量+B 样条基函数+控制点权重\boxed{ \text{NURBS} = \text{非均匀节点向量} + \text{B 样条基函数} + \text{控制点权重} }

18. 从曲线推广到曲面 #

普通 B 样条曲面为

S(u,v)=i=0nj=0mNi,p(u)Mj,q(v)Pi,j.\mathbf S(u,v) = \sum_{i=0}^{n} \sum_{j=0}^{m} N_{i,p}(u)M_{j,q}(v)\mathbf P_{i,j}.

有理 B 样条曲面为

S(u,v)=ijNi,p(u)Mj,q(v)wi,jPi,jijNi,p(u)Mj,q(v)wi,j.\mathbf S(u,v) = \frac{ \sum_i\sum_j N_{i,p}(u)M_{j,q}(v) w_{i,j}\mathbf P_{i,j} }{ \sum_i\sum_j N_{i,p}(u)M_{j,q}(v) w_{i,j} }.

它的齐次控制点为

Pi,jw=(wi,jPi,j,wi,j).\mathbf P_{i,j}^w = (w_{i,j}\mathbf P_{i,j},w_{i,j}).

处理方法和曲线完全一致:

  1. 把控制点提升到高一维齐次空间;
  2. 在齐次空间中构造普通张量积 B 样条曲面;
  3. 对曲面上的齐次点进行透视投影。

因此,理解了有理 B 样条曲线,也就基本理解了有理 B 样条曲面。


19. 总结 #

从普通 B 样条到 NURBS,可以用以下几个层次来理解。

普通 B 样条曲线是控制点关于 B 样条基函数的组合:

C(u)=iNi,p(u)Pi.\mathbf C(u) = \sum_iN_{i,p}(u)\mathbf P_i.

NURBS 为每个控制点增加权重:

C(u)=iNi,p(u)wiPiiNi,p(u)wi.\mathbf C(u) = \frac{ \sum_iN_{i,p}(u)w_i\mathbf P_i }{ \sum_iN_{i,p}(u)w_i }.

从几何上看,每个控制点被提升到齐次空间:

Piw=(wiPi,wi).\mathbf P_i^w=(w_i\mathbf P_i,w_i).

然后在齐次空间中构造普通 B 样条:

Cw(u)=iNi,p(u)Piw.\mathbf C^w(u) = \sum_iN_{i,p}(u)\mathbf P_i^w.

最后,从原点沿射线投影到 W=1W=1

(A,W)AW.(\mathbf A,W) \longmapsto \frac{\mathbf A}{W}.

于是得到 NURBS 曲线。

整个过程可以浓缩为:

NURBS 曲线=高一维齐次空间中的普通 B 样条+透视投影\boxed{ \text{NURBS 曲线} = \text{高一维齐次空间中的普通 B 样条} + \text{透视投影} }

这也是理解 NURBS 最重要的心智模型。

权重、分母和有理基函数都不是相互独立的技巧,而是齐次坐标和透视投影自然产生的结果。

(完)

目录