日期:2026年3月15日标签:Computer Graphics

从 B 样条曲线到 B 样条曲面:张量积构造、计算方法与性质 #

B 样条曲面并不是一套与 B 样条曲线完全不同的理论。

它可以理解为:在两个参数方向上分别使用 B 样条基函数,再将两个方向的基函数相乘,形成一个二维张量积结构。

从 B 样条曲线过渡到 B 样条曲面,核心变化可以概括为:

B 样条曲线B 样条曲面
一个参数 uu两个参数 u,vu,v
一列控制点 PiP_i二维控制点网格 Pi,jP_{i,j}
一个节点向量 UU两个节点向量 U,VU,V
一个次数 pp两个次数 p,qp,q
基函数 Ni,p(u)N_{i,p}(u)乘积基函数 Ni,p(u)Nj,q(v)N_{i,p}(u)N_{j,q}(v)
控制多边形控制网格

一、从 B 样条曲线过渡到 B 样条曲面 #

1. B 样条曲线回顾 #

一条 pp 次 B 样条曲线定义为

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

其中:

  • uu 是曲线参数;
  • PiP_i 是控制点;
  • Ni,p(u)N_{i,p}(u)pp 次 B 样条基函数;
  • 控制点共有 n+1n+1 个。

节点向量为

U=u0,u1,,ur,U={u_0,u_1,\ldots,u_r},

节点数量满足

r=n+p+1.r=n+p+1.

对于一个固定的参数 uu,曲线点 C(u)C(u) 是控制点 PiP_i 的加权组合。


2. 将控制点扩展为控制点网格 #

曲线的控制点只有一个下标:

P0,P1,,Pn.P_0,P_1,\ldots,P_n.

曲面有两个参数方向,因此控制点需要排列成二维网格:

Pi,j,i=0,,n,j=0,,m.P_{i,j}, \qquad i=0,\ldots,n, \quad j=0,\ldots,m.

控制点网格可以写成

P0,0P0,1P0,m P1,0P1,1P1,m  Pn,0Pn,1Pn,m.\begin{matrix} P_{0,0}&P_{0,1}&\cdots&P_{0,m}\ P_{1,0}&P_{1,1}&\cdots&P_{1,m}\ \vdots&\vdots&&\vdots\ P_{n,0}&P_{n,1}&\cdots&P_{n,m} \end{matrix}.

因此,从曲线到曲面的第一个变化是

控制多边形控制网格\boxed{ \text{控制多边形} \longrightarrow \text{控制网格} }

3. 把曲线的控制点替换成另一方向的曲线 #

原来的曲线为

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

现在不再让 PiP_i 是固定点,而是让它随着另一个参数 vv 变化。

对于固定的 ii,定义一条 vv 方向的 qq 次 B 样条曲线:

Qi(v)=j=0mNj,q(v)Pi,j.Q_i(v)=\sum_{j=0}^{m}N_{j,q}(v)P_{i,j}.

然后将曲线公式中的 PiP_i 替换为 Qi(v)Q_i(v)

S(u,v)=i=0nNi,p(u)Qi(v).S(u,v)=\sum_{i=0}^{n}N_{i,p}(u)Q_i(v).

代入 Qi(v)Q_i(v)

S(u,v)======i=0nNi,p(u)(j=0mNj,q(v)Pi,j).S(u,v) ====== \sum_{i=0}^{n} N_{i,p}(u) \left( \sum_{j=0}^{m}N_{j,q}(v)P_{i,j} \right).

展开可得

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

这就是张量积 B 样条曲面的定义。


4. 为什么两个方向的基函数要相乘 #

控制点 Pi,jP_{i,j} 对曲面点 S(u,v)S(u,v) 的影响,需要同时考虑两个方向:

  • uu 方向的权重为 Ni,p(u)N_{i,p}(u)
  • vv 方向的权重为 Nj,q(v)N_{j,q}(v)

因此,总权重是两个权重的乘积:

Bi,j(u,v)============Ni,p(u)Nj,q(v)\boxed{ B_{i,j}(u,v) ============ N_{i,p}(u)N_{j,q}(v) }

这个二维基函数称为张量积基函数。

可以直观地理解为:

一个控制点只有在 uu 方向和 vv 方向都对当前参数点有影响时,才会对曲面点产生影响。


二、曲面的节点向量与参数域 #

1. 两个节点向量 #

曲面有两个参数方向,因此也有两个节点向量。

uu 方向的节点向量为

U=u0,u1,,ur,U={u_0,u_1,\ldots,u_r},

vv 方向的节点向量为

V=v0,v1,,vs.V={v_0,v_1,\ldots,v_s}.

节点数关系分别为

r=n+p+1\boxed{r=n+p+1}

s=m+q+1.\boxed{s=m+q+1}.

其中:

  • n+1n+1uu 方向控制点数;
  • m+1m+1vv 方向控制点数;
  • ppuu 方向次数;
  • qqvv 方向次数。

2. 夹持节点向量 #

若两个方向都采用归一化夹持节点向量,则可以写成

U=0,,0p+1,up+1,,urp1,1,,1p+1,U= { \underbrace{0,\ldots,0}*{p+1}, u*{p+1},\ldots,u_{r-p-1}, \underbrace{1,\ldots,1}_{p+1} }, V=0,,0q+1,vq+1,,vsq1,1,,1q+1.V= { \underbrace{0,\ldots,0}*{q+1}, v*{q+1},\ldots,v_{s-q-1}, \underbrace{1,\ldots,1}_{q+1} }.

3. 参数域 #

B 样条曲线的参数域是一个区间,而 B 样条曲面的参数域是两个区间的笛卡尔积:

(u,v)[up,urp]×[vq,vsq]\boxed{ (u,v)\in [u_p,u_{r-p}] \times [v_q,v_{s-q}] }

等价于

upuurp,u_p\leq u\leq u_{r-p}, vqvvsq.v_q\leq v\leq v_{s-q}.

如果两个方向都归一化为 [0,1][0,1],则参数域为

(u,v)[0,1]×[0,1]\boxed{ (u,v)\in[0,1]\times[0,1] }

这个矩形存在于 uvuv 参数平面中。

需要注意:

参数域是矩形,并不意味着映射到三维空间中的曲面也是矩形。


三、固定一个参数:等参数曲线 #

B 样条曲面的一个重要性质是:固定一个参数后,得到的仍然是 B 样条曲线。

1. 固定 u=u0u=u_0 #

从曲面公式出发:

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

u=u0u=u_0,则

S(u0,v)=j=0mNj,q(v)(i=0nNi,p(u0)Pi,j).S(u_0,v) = \sum_{j=0}^{m} N_{j,q}(v) \left( \sum_{i=0}^{n} N_{i,p}(u_0)P_{i,j} \right).

定义新的控制点

Qj(u0)=i=0nNi,p(u0)Pi,j,Q_j(u_0) = \sum_{i=0}^{n} N_{i,p}(u_0)P_{i,j},

于是

Cu0(v)=S(u0,v)j=0mNj,q(v)Qj(u0)\boxed{ C_{u_0}(v)=S(u_0,v) \sum_{j=0}^{m} N_{j,q}(v)Q_j(u_0) }

它是一条定义在节点向量 VV 上的 qq 次 B 样条曲线。


2. 固定 v=v0v=v_0 #

类似地,

S(u,v0)=i=0nNi,p(u)(j=0mNj,q(v0)Pi,j).S(u,v_0) = \sum_{i=0}^{n} N_{i,p}(u) \left( \sum_{j=0}^{m} N_{j,q}(v_0)P_{i,j} \right).

定义

Ri(v0)=j=0mNj,q(v0)Pi,j,R_i(v_0) = \sum_{j=0}^{m} N_{j,q}(v_0)P_{i,j},

于是

Cv0(u)=S(u,v0)i=0nNi,p(u)Ri(v0)\boxed{ C_{v_0}(u)=S(u,v_0) \sum_{i=0}^{n} N_{i,p}(u)R_i(v_0) }

它是一条定义在节点向量 UU 上的 pp 次 B 样条曲线。

因此:

固定 B 样条曲面的任意一个参数,都会得到一条 B 样条曲线。\boxed{ \text{固定 B 样条曲面的任意一个参数,都会得到一条 B 样条曲线。} }

这些曲线称为等参数曲线

曲面可以看成由两族纵横交错的等参数曲线编织而成。


四、曲面点的计算方法 #

1. 计算一个曲面点的五个步骤 #

对于一个给定的参数点 (u,v)(u,v),计算 S(u,v)S(u,v) 可以分成五步。

第一步:确定 uu 所在节点区间 #

寻找 ii,使得

u[ui,ui+1).u\in[u_i,u_{i+1}).

第二步:计算 uu 方向非零基函数 #

只需计算

Nip,p(u),,Ni,p(u).N_{i-p,p}(u),\ldots,N_{i,p}(u).

总共至多有 p+1p+1 个。

第三步:确定 vv 所在节点区间 #

寻找 jj,使得

v[vj,vj+1).v\in[v_j,v_{j+1}).

第四步:计算 vv 方向非零基函数 #

只需计算

Njq,q(v),,Nj,q(v).N_{j-q,q}(v),\ldots,N_{j,q}(v).

总共至多有 q+1q+1 个。

第五步:与局部控制点相乘并求和 #

曲面点只需使用局部控制点:

S(u,v)=k=ipil=jqjNk,p(u)Nl,q(v)Pk,l\boxed{ S(u,v)= \sum_{k=i-p}^{i} \sum_{l=j-q}^{j} N_{k,p}(u)N_{l,q}(v)P_{k,l} }

因此,计算一个曲面点不需要遍历全部控制点,只需要至多

(p+1)(q+1)\boxed{(p+1)(q+1)}

个局部控制点。


2. 矩阵形式 #

uu 方向的非零基函数写成行向量:

NuT=[Nip,p(u)Ni,p(u)].\mathbf N_u^T= \begin{bmatrix} N_{i-p,p}(u)&\cdots&N_{i,p}(u) \end{bmatrix}.

vv 方向的非零基函数写成列向量:

Nv=[Njq,q(v)  Nj,q(v)].\mathbf N_v= \begin{bmatrix} N_{j-q,q}(v)\ \vdots\ N_{j,q}(v) \end{bmatrix}.

对应的局部控制点组成矩阵:

P=[Pip,jqPip,j  Pi,jqPi,j].\mathbf P= \begin{bmatrix} P_{i-p,j-q}&\cdots&P_{i-p,j}\ \vdots&&\vdots\ P_{i,j-q}&\cdots&P_{i,j} \end{bmatrix}.

于是

S(u,v)=NuTPNv\boxed{ S(u,v)= \mathbf N_u^T\mathbf P\mathbf N_v }

其维度关系为

1×(p+1),1\times(p+1), (p+1)×(q+1),(p+1)\times(q+1), (q+1)×1.(q+1)\times1.

3. 分两次曲线求值 #

实际计算时,也可以先沿一个方向计算临时点,再沿另一个方向计算。

例如先沿 uu 方向:

Ql(u)=k=ipiNk,p(u)Pk,l,Q_l(u) = \sum_{k=i-p}^{i} N_{k,p}(u)P_{k,l},

然后沿 vv 方向:

S(u,v)=l=jqjNl,q(v)Ql(u).S(u,v) = \sum_{l=j-q}^{j} N_{l,q}(v)Q_l(u).

也可以先沿 vv 方向再沿 uu 方向,结果完全相同。


五、张量积 B 样条基函数的性质 #

令二维基函数为

Bi,j(u,v)=Ni,p(u)Nj,q(v).B_{i,j}(u,v) = N_{i,p}(u)N_{j,q}(v).

这些性质大多由两个方向的一维 B 样条基函数直接推导得到。

1. 非负性 #

一维 B 样条基函数满足

Ni,p(u)0,N_{i,p}(u)\geq0, Nj,q(v)0.N_{j,q}(v)\geq0.

因此乘积满足

Ni,p(u)Nj,q(v)0\boxed{ N_{i,p}(u)N_{j,q}(v)\geq0 }

二维基函数不会产生负权重。


2. 规范性或单位分解 #

两个方向分别满足

i=0nNi,p(u)=1,\sum_{i=0}^{n}N_{i,p}(u)=1, j=0mNj,q(v)=1.\sum_{j=0}^{m}N_{j,q}(v)=1.

因此

i=0nj=0mNi,p(u)Nj,q(v)=(i=0nNi,p(u))(j=0mNj,q(v)) =11 =1.\begin{aligned} \sum_{i=0}^{n}\sum_{j=0}^{m} N_{i,p}(u)N_{j,q}(v) &= \left( \sum_{i=0}^{n}N_{i,p}(u) \right) \left( \sum_{j=0}^{m}N_{j,q}(v) \right)\ &=1\cdot1\ &=1. \end{aligned}

所以

i=0nj=0mNi,p(u)Nj,q(v)=1\boxed{ \sum_{i=0}^{n}\sum_{j=0}^{m} N_{i,p}(u)N_{j,q}(v)=1 }

3. Bézier 基函数是特殊情况 #

如果

n=p,m=q,n=p, \qquad m=q,

并且两个方向都没有内部节点:

U=0,,0p+1,1,,1p+1,U= { \underbrace{0,\ldots,0}*{p+1}, \underbrace{1,\ldots,1}*{p+1} }, V=0,,0q+1,1,,1q+1,V= { \underbrace{0,\ldots,0}*{q+1}, \underbrace{1,\ldots,1}*{q+1} },

Ni,p(u)=Bi,p(u),N_{i,p}(u)=B_{i,p}(u), Nj,q(v)=Bj,q(v),N_{j,q}(v)=B_{j,q}(v),

其中 Bi,pB_{i,p}Bj,qB_{j,q} 是 Bernstein 多项式。

因此

Ni,p(u)Nj,q(v)=Bi,p(u)Bj,q(v).N_{i,p}(u)N_{j,q}(v) = B_{i,p}(u)B_{j,q}(v).

张量积 B 样条基函数便退化为张量积 Bernstein 基函数。


4. 局部支撑性 #

一维基函数的支撑域分别为

Ni,p(u)=0,u[ui,ui+p+1),N_{i,p}(u)=0, \qquad u\notin[u_i,u_{i+p+1}), Nj,q(v)=0,v[vj,vj+q+1).N_{j,q}(v)=0, \qquad v\notin[v_j,v_{j+q+1}).

因此,如果参数点 (u,v)(u,v) 位于矩形

[ui,ui+p+1)×[vj,vj+q+1)[u_i,u_{i+p+1}) \times [v_j,v_{j+q+1})

之外,则

Ni,p(u)Nj,q(v)=0\boxed{ N_{i,p}(u)N_{j,q}(v)=0 }

也就是说,二维基函数的支撑域是一个参数矩形。


5. 一个节点小矩形内非零基函数的数量 #

(u,v)[ui0,ui0+1)×[vj0,vj0+1).(u,v)\in [u_{i_0},u_{i_0+1}) \times [v_{j_0},v_{j_0+1}).

uu 方向可能非零的基函数为

Ni0p,p(u),,Ni0,p(u),N_{i_0-p,p}(u),\ldots,N_{i_0,p}(u),

p+1p+1 个。

vv 方向可能非零的基函数为

Nj0q,q(v),,Nj0,q(v),N_{j_0-q,q}(v),\ldots,N_{j_0,q}(v),

q+1q+1 个。

因此,一个节点小矩形中至多有

(p+1)(q+1)\boxed{(p+1)(q+1)}

个张量积基函数非零。


6. 唯一最大值 #

p>0p>0q>0q>0,则张量积基函数

Ni,p(u)Nj,q(v)N_{i,p}(u)N_{j,q}(v)

在其支撑域中只达到一次最大值。

直观上,二维基函数的峰值位置由两个一维基函数各自的峰值位置共同决定。


7. 分片二元多项式性质 #

在由相邻节点线构成的开矩形内部:

(u,v)(uk,uk+1)×(vl,vl+1),(u,v)\in (u_k,u_{k+1}) \times (v_l,v_{l+1}),

一维基函数分别是关于 uuvv 的多项式。

因此

Ni,p(u)Nj,q(v)N_{i,p}(u)N_{j,q}(v)

是一个二元多项式:

  • 关于 uu 的次数不超过 pp
  • 关于 vv 的次数不超过 qq

所以 B 样条曲面是分片双变量多项式曲面。


8. 基函数的连续性 #

uu 方向某个内部节点的重复度为 kk,则基函数关于 uu 通常具有

Cpk\boxed{C^{p-k}}

连续性。

vv 方向某个内部节点的重复度为 kk,则基函数关于 vv 通常具有

Cqk\boxed{C^{q-k}}

连续性。

例如,当 p=3p=3 时:

  • 简单节点 k=1k=1:关于 uuC2C^2
  • 二重节点 k=2k=2:关于 uuC1C^1
  • 三重节点 k=3k=3:关于 uuC0C^0

两个参数方向的连续性可以分别控制。


六、B 样条曲面的几何性质 #

1. Bézier 曲面是特殊的 B 样条曲面 #

n=pn=pm=qm=q,且两个方向都没有内部节点时:

S(u,v)=i=0pj=0qBi,p(u)Bj,q(v)Pi,j.S(u,v) = \sum_{i=0}^{p}\sum_{j=0}^{q} B_{i,p}(u)B_{j,q}(v)P_{i,j}.

这正是张量积 Bézier 曲面。

因此

Beˊzier 曲面是单曲面片的 B 样条曲面。\boxed{ \text{Bézier 曲面是单曲面片的 B 样条曲面。} }

2. 角点插值性质 #

若两个节点向量都是首尾夹持的,并且参数域为 [0,1]2[0,1]^2,则曲面插值控制网格的四个角点:

S(0,0)=P0,0\boxed{S(0,0)=P_{0,0}} S(1,0)=Pn,0\boxed{S(1,0)=P_{n,0}} S(0,1)=P0,m\boxed{S(0,1)=P_{0,m}} S(1,1)=Pn,m\boxed{S(1,1)=P_{n,m}}

这是曲线端点插值性质在两个方向上的推广。


3. 四条边界是 B 样条曲线 #

对于夹持曲面,四条边界分别为:

S(0,v)=j=0mNj,q(v)P0,j,S(0,v) = \sum_{j=0}^{m} N_{j,q}(v)P_{0,j}, S(1,v)=j=0mNj,q(v)Pn,j,S(1,v) = \sum_{j=0}^{m} N_{j,q}(v)P_{n,j}, S(u,0)=i=0nNi,p(u)Pi,0,S(u,0) = \sum_{i=0}^{n} N_{i,p}(u)P_{i,0}, S(u,1)=i=0nNi,p(u)Pi,m.S(u,1) = \sum_{i=0}^{n} N_{i,p}(u)P_{i,m}.

因此,曲面的四条边界本身都是 B 样条曲线,并分别由控制网格最外侧的一行或一列控制点决定。


4. 仿射不变性 #

设仿射变换为

T(X)=AX+b.T(X)=AX+b.

对曲面进行仿射变换:

T(S(u,v))=A(ijNi,p(u)Nj,q(v)Pi,j)+b.T(S(u,v)) = A \left( \sum_i\sum_j N_{i,p}(u)N_{j,q}(v)P_{i,j} \right) +b.

利用规范性

ijNi,p(u)Nj,q(v)=1,\sum_i\sum_j N_{i,p}(u)N_{j,q}(v)=1,

得到

T(S(u,v))=ijNi,p(u)Nj,q(v)(APi,j+b) =ijNi,p(u)Nj,q(v)T(Pi,j).\begin{aligned} T(S(u,v)) &= \sum_i\sum_j N_{i,p}(u)N_{j,q}(v) \bigl(AP_{i,j}+b\bigr)\ &= \sum_i\sum_j N_{i,p}(u)N_{j,q}(v)T(P_{i,j}). \end{aligned}

所以

T(S(u,v))=ijNi,p(u)Nj,q(v)T(Pi,j)\boxed{ T(S(u,v)) = \sum_i\sum_j N_{i,p}(u)N_{j,q}(v)T(P_{i,j}) }

即:

对整张曲面做仿射变换,等价于对所有控制点做同样的仿射变换,再重新构造曲面。


5. 凸包性质 #

曲面点写成

S(u,v)=ijwi,j(u,v)Pi,j,S(u,v)= \sum_i\sum_j w_{i,j}(u,v)P_{i,j},

其中

wi,j(u,v)=Ni,p(u)Nj,q(v).w_{i,j}(u,v) = N_{i,p}(u)N_{j,q}(v).

由于

wi,j(u,v)0w_{i,j}(u,v)\geq0

ijwi,j(u,v)=1,\sum_i\sum_jw_{i,j}(u,v)=1,

所以 S(u,v)S(u,v) 是控制点的凸组合。

因此

S(u,v) 位于整个控制网格的凸包内\boxed{ S(u,v) \text{ 位于整个控制网格的凸包内} }

6. 强凸包性质 #

(u,v)[ui0,ui0+1)×[vj0,vj0+1).(u,v)\in [u_{i_0},u_{i_0+1}) \times [v_{j_0},v_{j_0+1}).

则当前曲面点只受以下控制点影响:

Pi,j,P_{i,j},

其中

i=i0p,,i0,i=i_0-p,\ldots,i_0, j=j0q,,j0.j=j_0-q,\ldots,j_0.

因此

S(u,v) 位于这 (p+1)(q+1) 个局部控制点的凸包内\boxed{ S(u,v) \text{ 位于这 }(p+1)(q+1) \text{ 个局部控制点的凸包内} }

这就是 B 样条曲面的强凸包性质。

例如,对于 3×23\times2 次曲面,即 p=3p=3q=2q=2,一个局部曲面片至多由

(3+1)(2+1)=12(3+1)(2+1)=12

个控制点决定。


7. 控制网格的三角化逼近 #

将控制网格中的每个四边形拆分成三角形,可以得到一个由平面三角片组成的分片线性曲面。

这个三角网格可以作为 B 样条曲面的平面片逼近。

一般来说:

曲面次数越低,控制网格的三角化通常越接近实际曲面。\boxed{ \text{曲面次数越低,控制网格的三角化通常越接近实际曲面。} }

但控制网格本身通常并不位于曲面上,它只是曲面的几何控制结构。


8. 局部修改性 #

控制点 Pi,jP_{i,j} 对应的基函数支撑域为

[ui,ui+p+1)×[vj,vj+q+1).[u_i,u_{i+p+1}) \times [v_j,v_{j+q+1}).

因此,移动控制点 Pi,jP_{i,j},只会影响该参数矩形对应的局部曲面区域。

修改一个控制点,只会局部改变曲面。\boxed{ \text{修改一个控制点,只会局部改变曲面。} }

这也是 B 样条曲面适合交互式几何建模的重要原因。


9. 曲面的连续性与可微性 #

曲面

S(u,v)=ijNi,p(u)Nj,q(v)Pi,jS(u,v)= \sum_i\sum_j N_{i,p}(u)N_{j,q}(v)P_{i,j}

的连续性与可微性由基函数决定。

uu 方向某节点重复度为 kk,则曲面跨越相应节点线时,关于 uu 通常为

Cpk.\boxed{C^{p-k}}.

vv 方向某节点重复度为 kk,则曲面关于 vv 通常为

Cqk.\boxed{C^{q-k}}.

因此:

  • 增加 uu 方向节点重复度,会降低跨越对应 uu 节点线时的光滑性;
  • 增加 vv 方向节点重复度,会降低跨越对应 vv 节点线时的光滑性。

10. 重复节点与重复控制点的区别 #

产生尖锐特征有两种不同方式。

重复节点 #

重复节点会直接降低基函数和曲面的参数连续阶数。

例如三次方向 p=3p=3

  • 简单节点:C2C^2
  • 二重节点:C1C^1
  • 三重节点:C0C^0

重复控制点 #

如果相邻的若干控制点重合,可以形成明显的尖锐隆起、脊线或皱折。

但需要注意:

重复控制点不一定改变基函数本身的连续阶数。

曲面在参数意义上可能仍然具有较高阶连续性,但几何外观上可以非常尖锐。


七、曲线性质不能全部机械推广到曲面 #

多数 B 样条曲线性质都可以通过张量积推广到曲面,例如:

  • 非负性;
  • 单位分解;
  • 局部性;
  • 凸包性;
  • 仿射不变性;
  • 连续性;
  • 局部修改性。

但是,并不是所有曲线性质都能直接推广。

书中特别指出:

B 样条曲面一般不具有与 B 样条曲线完全对应的变差减小性。\boxed{ \text{B 样条曲面一般不具有与 B 样条曲线完全对应的变差减小性。} }

对于曲线,可以利用控制多边形与直线的交点数来研究曲线的振荡程度。

但对于二维曲面,并不存在一个同样简单、直接对应的变差减小结论。


八、B 样条曲线与曲面的对应关系 #

曲线中的概念曲面中的推广
参数 uu参数对 (u,v)(u,v)
控制点 PiP_i控制点网格 Pi,jP_{i,j}
控制多边形控制网格
节点向量 UU节点向量 U,VU,V
次数 pp双次数 (p,q)(p,q)
基函数 Ni,p(u)N_{i,p}(u)Ni,p(u)Nj,q(v)N_{i,p}(u)N_{j,q}(v)
参数域为区间参数域为矩形
局部 p+1p+1 个基函数非零局部至多 (p+1)(q+1)(p+1)(q+1) 个基函数非零
固定参数得到一个点固定一个参数得到一条等参数曲线
端点插值四角点插值
局部凸包局部控制点网格的凸包
修改一个控制点影响局部曲线修改一个控制点影响局部曲面
Bézier 曲线是特殊情况Bézier 曲面是特殊情况

九、总结 #

B 样条曲面是 B 样条曲线在两个参数方向上的张量积推广。

从曲线

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

出发,将控制点替换为另一方向上的 B 样条曲线,就得到

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

理解 B 样条曲面时,可以抓住以下几个核心观点:

  1. 曲面有两个参数。

    uuvv 分别控制两个参数方向。

  2. 控制点由一列变成二维网格。

    控制多边形推广为控制网格。

  3. 二维基函数是两个一维基函数的乘积。

    Bi,j(u,v)=Ni,p(u)Nj,q(v).B_{i,j}(u,v)=N_{i,p}(u)N_{j,q}(v).
  4. 固定一个参数,就得到一条 B 样条曲线。

    曲面由两族等参数曲线组成。

  5. 局部曲面点只受有限控制点影响。

    在一个节点小矩形中,最多只有

    (p+1)(q+1)(p+1)(q+1)

    个控制点参与计算。

  6. 曲线的多数性质可以推广到曲面。

    包括非负性、规范性、凸包性、仿射不变性、局部修改性和连续性。

  7. 连续性可以在两个方向分别控制。

    uu 方向由次数 pp 和节点向量 UU 中的节点重复度决定,vv 方向由次数 qq 和节点向量 VV 中的节点重复度决定。

因此,B 样条曲面可以看成:

用两个方向的 B 样条曲线,通过张量积编织而成的曲面。\boxed{ \text{用两个方向的 B 样条曲线,通过张量积编织而成的曲面。} }

(完)

目录