NURBS: 由来

NURBS(Non-Uniform Rational B-Splines) 是一种用于数学建模和计算机图形学的技术。它是一种灵活的用于描述曲线和曲面的方法,具有广泛的应用,包括计算机辅助设计(CAD)、计算机图形学、虚拟现实等领域。NURBS之所以受到青睐,是因为它们可以以高度灵活的方式控制曲线和曲面的形状,同时保持数学上的精确性。

NURBS通过基函数的组合来定义曲线和曲面,这些基函数是基于B样条(B-Splines)基函数的改进,但与B样条不同的是,NURBS允许在基函数中引入权重,从而更灵活地控制曲线和曲面的形状。具体来说,NURBS曲线和曲面可以由控制点权重以及次数为基础的基函数来定义。这种灵活性使得NURBS能够更好地适应不同形状和设计需求。

B-样条曲线是多项式曲线。虽然它们灵活且在曲线设计中具有许多良好的特性,但它们不能表示最简单的曲线:圆。圆只能用有理函数表示(即,两个多项式的商)。为了处理圆、椭圆和许多其他不能用多项式表示的曲线,因此需要对B样条曲线进行扩展。

圆是一个二次曲线。为什么B样条曲线不能表示它?

以下是四个闭合的B样条曲线,具有8个控制点。从左到右的度数分别是2、3、5和10。二次闭合的B样条看起来不像一个圆,它看起来像一个圆角正方形。三次曲线看起来稍微好一些。随着度数的增加,曲线的"圆润程度"变得更好。十次闭合曲线与圆非常相似;但它依旧不是一个圆。即使你可以把这个十次曲线作为一个圆接受,这也是近似的。

img img img img

为了解决这个问题,我们将使用 “齐次坐标” 将B样条推广为 有理曲线。因此,我们有了Non-Uniform Rational B-Splines,即NURBS曲线

NURBS曲线的定义

我们将齐次坐标引入到B样条曲线中并推导NURBS曲线的定义:

给定 n+1n+1 个控制点 P0,P1,...,PnP_0, P_1, ..., P_nm+1m+1 个节点的结点向量 :U=u0,u1,...,umU = { u_0, u_1, ..., u_m }
由这些参数定义的次数为 pp 的B样条曲线定义如下:

C(u)=i=0nNi,p(u)Pi\mathbf{C}(u)=\sum_{i=0}^nN_{i,p}(u)\mathbf{P}_i

其中,Ni,p(u)N_{i,p}(u) 是B样条基函数。

将控制点 Pi\mathbf{P}_i 重写为一个具有四个分量的列向量,第四个分量为 1:

Pi=[xiyizi1]\mathbf{P}_i=\left[\begin{array}{c}x_i\\y_i\\z_i\\1\end{array}\right]

我们可以将这个 Pi\mathbf{P}_i 视为齐次坐标。由于将一个点的坐标(以齐次形式表示)与非零数相乘不会改变其位置,因此,我们将 Pi\mathbf{P}_i 的坐标乘以一个权重 wiw_i,这样可以获得一个新的齐次坐标形式:

Piw=[wixiwiyiwiziwi]\mathbf{P}_{i}^{w}=\left[\begin{array}{c}w_{i}x_{i}\\w_{i}y_{i}\\w_{i}z_{i}\\w_{i}\end{array}\right]

注意,Piw\mathbf{P}_{i}^{w}Pi\mathbf{P}_{i} 在齐次坐标中代表同一点。将这种新的齐次形式代入上述B样条曲线的方程中,我们可以得到:

Cw(u)=i=0nNi,p(u)Piw=i=0nNi,p(u)[wixiwiyiwiziwi]=[i=0nNi,p(u)(wixi)i=0nNi,p(u)(wiyi)i=0nNi,p(u)(wizi)i=0nNi,p(u)wi]\mathbf{C}^w(u)=\sum\limits_{i=0}^nN_{i,p}(u)\mathbf{P}_i^w=\sum\limits_{i=0}^nN_{i,p}(u)\left[\begin{array}{c}w_ix_i\\w_iy_i\\w_iz_i\\w_i\end{array}\right]=\left[\begin{array}{c}\sum\limits_{i=0}^nN_{i,p}(u)(w_ix_i)\\\sum\limits_{i=0}^nN_{i,p}(u)(w_iy_i)\\\sum\limits_{i=0}^nN_{i,p}(u)(w_iz_i)\\\sum\limits_{i=0}^nN_{i,p}(u)w_i\end{array}\right]

因此,点 Cw(u)C^{w}(u) 是齐次坐标形式下的B样条曲线表示。

现在,通过将 Cw(u)C_w(u) 除以第四个坐标来将其转换回笛卡尔坐标:

C(u)=[i=0nNi,p(u)(wixi)i=0nNi,p(u)wii=0nNi,p(u)(wiyi)i=0nNi,p(u)wii=0nNi,p(u)(wizi)i=0nNi,p(u)wi1]=i=0nNi,p(u)wij=0nNj,p(u)wj[xiyizi1]\mathbf{C}(u)=\begin{bmatrix}\frac{\sum_{i=0}^nN_{i,p}(u)(w_ix_i)}{\sum_{i=0}^nN_{i,p}(u)w_i}\\\frac{\sum_{i=0}^nN_{i,p}(u)(w_iy_i)}{\sum_{i=0}^nN_{i,p}(u)w_i}\\\frac{\sum_{i=0}^nN_{i,p}(u)(w_iz_i)}{\sum_{i=0}^nN_{i,p}(u)w_i}\\1\end{bmatrix}=\sum_{i=0}^n\frac{N_{i,p}(u)w_i}{\sum_{j=0}^nN_{j,p}(u)w_j}\begin{bmatrix}x_i\\y_i\\z_i\\1\end{bmatrix}

最后,我们得到以下形式:

C(u)=1i=0nNi,p(u)wii=0nNi,p(u)wiPi\mathbf{C}(u)=\frac{1}{\sum_{i=0}^nN_{i,p}(u)w_i}\sum_{i=0}^nN_{i,p}(u)w_i\mathbf{P}_i

上式是由控制点P0,P1,...Pn\mathbf{P}_{0}, \mathbf{P}_{1}, ...\mathbf{P}_{n} 定义的次数为 pp 的NURBS曲线,节点向量为: U=u0,u1,...,umU = {u_0, u_1, ..., u_m },权重分别为 w0w1,...,wnw_0,w_1,...,w_n

Tips: 由于权重 wiw_i 与控制点 Pi\mathbf{P}_i 相关联,作为其第四个分量,所以权重的数量和控制点的数量必须一致。

一般情况下,权重wiw_i是正的。但当权重为负值时也会有特别的效果。例如,如果一个权重wiw_i变成零,那么Pi\mathbf{P}_i的系数也是零,因此,控制点Pi\mathbf{P}_i对于曲线上任意一点uu的计算没有影响。因此零权重有时候也被称为**“无穷控制点”**。

两个结论

从上述定义式中,我们可以立即得出两个结论:

  1. 如果所有的权重都等于1,那么一个NURBS曲线将简化为一个B样条曲线。
    这是显而易见的,因为在这种情况下,齐次形式的控制点与传统笛卡尔形式相同,而1i=0nNi,p(u)wi\frac1{\sum_{i=0}^{n}N_{i,p}(u)w_{i}} 分母为1。

  2. NURBS曲线是有理曲线
    Ni,p(u)wiN_{i,p}(u)w_{i}的值是一个 pp 次多项式,控制点pi\mathbf{p}_i 是常数,1i=0nNi,p(u)wi\frac1{\sum_{i=0}^{n}N_{i,p}(u)w_{i}}中分母是所有系数的和,也是一个pp次多项式。因此,控制点Pi\mathbf{P}_i 的系数是两个次数为 pp 的多项式的商,因此NURBS曲线C(u)C(u)是有理的。

这两个结论表明B样条曲线是NURBS曲线的特殊情况。此外,由于NURBS曲线是有理的,因此圆、椭圆和许多其他用B样条无法表示的曲线现在都可以通过NURBS曲线定义。

几何解释

NURBS曲线是特殊类型的曲线吗?事实证明它们并不是。实际上,它们只是B样条曲线的另一面。

控制点PiW=(wixi,wiyi,wizi,wi)\mathbf{P}^{W}_{i}=(\begin{array}{ccc}w_{i}x_{i},&w_{i}y_{i},&w_{i}z_{i},&w_{i}\end{array})有四个分量,可以被看作是四维空间中的一个点,因此下面的C(u)C(u)为四维空间中的B样条曲线:

Cw(u)=i=0nNi,p(u)Piw=i=0nNi,p(u)[wixiwiyiwiziwi]=[i=0nNi,p(u)(wixi)i=0nNi,p(u)(wiyi)i=0nNi,p(u)(wizi)]\mathbf{C}^w(u)=\sum\limits_{i=0}^nN_{i,p}(u)\mathbf{P}_i^w=\sum\limits_{i=0}^nN_{i,p}(u)\left[\begin{array}{c}w_ix_i\\w_iy_i\\w_iz_i\\w_i\end{array}\right]=\left[\begin{array}{c}\sum\limits_{i=0}^nN_{i,p}(u)(w_ix_i)\\\sum\limits_{i=0}^nN_{i,p}(u)(w_iy_i)\\\sum\limits_{i=0}^nN_{i,p}(u)(w_iz_i)\end{array}\right]

齐次坐标的几何解释:通过将前三个坐标分量除以第四个坐标相当于将四维点投影到平面 w=1w = 1

上述曲线定义中,通过将前三个坐标除以第四个坐标,可以将B样条曲线定义转换为NURBS曲线定义。

所以我们有结论:三维空间中的NURBS曲线仅仅是四维空间中B样条曲线的投影。

给定n+1n+1个控制点P0,P1,,Pn\mathbf{P}_0,\mathbf{P}_1,\ldots,\mathbf{P}_n,每个点有一个非负权重 wiw_iwi>=0w_i >= 0),以及一个包含 m+1m+1 个节点的节点向量 U=u0u1...umU = { u_0, u_1, ..., u_m }pp次NURBS曲线的定义如下:

C(u)=i=0nRi,p(u)Pi\mathbf{C}(u)=\sum_{i=0}^nR_{i,p}(u)\mathbf{P}_i

Ri,p(u)R_{i,p}(u) 表示NURBS曲线基函数,其定义如下:

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

NURBS曲线基函数的重要性质

由于NURBS曲线是B样条的泛化,它应该具有B样条的所有性质。

以下是NURBS曲线基函数最重要的性质

  1. Ri,p(u)R_{i,p}(u) 是关于 uupp 次有理函数
  2. 非负性:对于任意 iippRi,p(u)R_{i,p}(u) 都是非负的
  3. 局部支撑: Ri,p(u)R_{i,p}(u)[ui,ui+p+1)[u_i, u_{i+p+1}) 上非零

因为 Ni,p(u)N_{i,p}(u)​ 在 [ui,ui+p+1)[u_i, u_{i+p+1})​ 上非零,所以 Ri,p(u)R_{i,p}(u)​ 也是非零的。(假设 wiw_i​ 非负)

  1. 在节点区间 [ui,ui+1)[u_i, u_{i+1}) 上,最多有 p+1p+1pp 次基函数是非零的,即:Rip,p(u)R_{i-p,p}(u)Rip+1,p(u)R_{i-p+1,p}(u)Rip+2,p(u)R_{i-p+2,p}(u),… Ri,p(u)R_{i,p}(u)
  2. 单位分割:在区间 [ui,ui+1)[u_i, u_{i+1}) 上所有非零pp次基函数之和为1
  3. 如果节点数为m+1m+1,基函数的次数为pp,且次数为pp的基函数数量为n+1n+1,则m=n+p+1m=n+p+1
  4. 基函数 Ri,p(u)R_{i,p}(u) 是一个次数为 pp 的有理函数复合曲线,由多个p次有理函数在节点处 [ui,ui+p+1)[u_i, u_{i+p+1}) 连接组成。
  5. 在一个重数为 kk 的节点处,基函数 Ri,p(u)R_{i,p}(u)CpkC^{p-k} 连续的。
    因此,增加多重性会降低曲线在该点连续性,增加次数会增加连续性。
  6. 如果对任意ii,都有 wi=cw_i = c,其中 cc 是一个非零常数,则Ri,p(u)=Ni,p(u)R_{i,p}(u)=N_{i,p}(u)
    因此,当所有权重变为非零常数时,B样条基函数是NURBS基函数的特殊情况
    我们已经提过,当 c=1c = 1 时,NURBS曲线的定义会退化成B样条曲线。

NURBS 曲线的重要特性

下面列出了NURBS曲线的重要特性。

与B样条曲线一样,NURBS曲线可以是OpenOpen的、ClampedClamped的或ClosedClosed的。如果前p+1p+1个节点值为0,后p+1p+1个节点值为1,(前提是曲线的定义域为[0,1][0,1])则曲线是ClampedClamped的。

  1. NURBS曲线 C(u)C(u) 是一个分段曲线,其中每个曲线段都是一个次数为 pp 的有理曲线。
    实际上,每个曲线段都是一个有理贝塞尔曲线。

  2. NURBS曲线必须满足 m=n+p+1m = n + p + 1

  3. ClampedClamped NURBS曲线C(u)C(u)通过端点的两个控制点P0P_0PnP_n

  4. 强凸包性质:**NURBS曲线位于其控制点定义的凸包内。**并且,如果uu在节点区间[ui,ui+1)[u_i,u_{i+1})内,则C(u)C(u)位于控制点Pip,Pip+1,...,PiP_{i-p}, P_{i-p+1}, ..., P_i定义的的凸包内。

    NURBS基函数的权重必须是非负的,如果其中一些是负数,则强凸包性质甚至凸包性质都有可能不满足。

    在下面,左图是一个2次NURBS曲线,n=2m=5n = 2,m = 5,前三个节点和后三个节点是Clamped的。两端的两个控制点权重为1,中间的控制点的权重为0.5。此时NURBS曲线是一个椭圆弧,曲线段位于凸壳内。

    img img img
    中间图中的中间控制点的权重被设为零,结果就是NUBRS退化为由端点确定的线段。它仍然位于凸包内。如果将中间控制点权重改为-0.5(右图),则曲线段不包含在凸包中,因此凸包性质失效。

  5. 局部修改特性:改变控制点 Pi\mathbf{P}_i 仅会影响到曲线 C(u)C(u) 在区间 [ui,ui+p+1)[u_i, u_{i+p+1}) 上的部分

    这是基于B样条基函数的局部修改特性得出的。回想一下,Ri,p(u)R_{i,p}(u)在区间 [ui,ui+p+1)[u_i,u_{i+p+1})上是非零的。
    如果 uu 不在这个区间内,由于Ri,p(u)R_{i,p}(u)为零且在计算 p(u)\mathbf{p}(u) 时, Ri,p(u)p(u)R_{i,p}(u)\mathbf{p}(u) 没有影响。另一方面,如果 uu 在指定的区间内,Ri,p(u)R_{i,p}(u)非零的,此时如果改变 Ri,p(u)p(u)R_{i,p}(u)\mathbf{p}(u),那么 C(u)C(u) 也会改变。

这种局部修改方案对曲线设计非常重要,因为我们可以在局部修改曲线而不会在全局范围内改变形状。此外,如果需要微调曲线形状,可以插入更多的节点(或者更多的控制点),以便受影响的区域可以被限制在非常窄的范围内。

  1. 如果 uu 是一个重数为 kk 的节点,那么 C(u)C(u) 在该节点处是 CpkC^{p-k} 连续的。
    如果 uu 不是一个节点,C(u)C(u) 位于一个 pp 次曲线段的中间,因此是无限可微的。
    如果 uu 是在 Ri,p(u)R_{i,p}(u)的非零定义域上的一个节点,由于Ri,p(u)R_{i,p}(u)仅是CpkC^{p-k}连续的,所以 C(u)C(u) 也是CpkC^{p-k}连续的。

  2. 变差缩减特性:
    如果曲线包含在一个平面(或空间)中,这意味着没有直线(或平面)比它与曲线的控制折线相交的次数更多。

  3. B样条曲线和贝塞尔曲线是NURBS曲线的特殊情况

    如果所有的权重都相等,那么NURBS曲线就变成了B样条曲线。
    进一步地,令n=pn = p(即,B样条曲线的阶数等于nn,即控制点数量减1),并且有2(p+1)=2(n+1)2(p + 1) = 2(n + 1)个节点,其中前p+1p + 1个节点和后p+1p+1个节点在端部被clampedclamped,那么这个NURBS曲线就退化为一个贝塞尔曲线。

  4. 投影变换不变性

    如果将投影变换应用于NURBS曲线,则结果可以由其经过投影变换后的控制点构造而成。当我们想要对 NURBS 曲线应用几何变换甚至投影变换时,我们可以将变换应用于控制点,而转换后的 NURBS 曲线由转换后的控制点定义。因此,无需直接对曲线进行变换。
    注意,贝塞尔曲线和B样条曲线只满足仿射不变性质,而不是这种投影不变性质。这是因为只有NURBS曲线涉及投影变换。

NURBS曲线:修改权重的影响

NURBS曲线的基函数为

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

因此,增加和减少wiw_i的值将分别增加和减少Ri,p(u)R_{i,p}(u)的值。更准确地说,增加wiw_i的值将会拉动曲线朝向控制点pi\mathbf{p}_i

并且,曲线上所有受影响的点也将朝向pi\mathbf{p}_i的方向被拉动。当wiw_i趋近于无穷时,曲线将通过控制点pi\mathbf{p}_i。另一方面,减少wiw_i的值将使曲线远离控制点pi\mathbf{p}_i

下图显示了一个6次NURBS曲线及其基函数。所选观察控制点为 p9\mathbf{p}_9。在第一个图中,所有权重都是1,曲线是B样条曲线。在第二个图中,w9w_9增加到2,可以看到曲线的一部分向 p9\mathbf{p}_9 移动。由于 w9w_9增加了,所以R9,6(u)R_{9,6}(u)也如右图所示增加了。

img img

img img

下面,我们将w9w_9进一步增加到5、10和20,相应的也R9,6(u)R_{9,6}(u)也变得更大,这也将曲线进一步拉向控制点p9\mathbf{p}_9。当w9w_9 = 20时,曲线已经非常接近p9\mathbf{p}_9点了。

img img

img img

img img

再来看看相反的效果。以下是所有权重都为1的初始情况。然后,w9w_9 被减小到0.5,这将曲线推离控制点 p9\mathbf{p}_9。由于权重减少,相应的 R9,6(u)R_{9,6}(u)也会减小,控制点 p9\mathbf{p}_9 对曲线 w9w_9 的影响也会减小。
w9w_9 改变为0.1时,曲线被进一步推离。最后一幅图显示了 w9w_9 为零时的曲线。由于 R9,6(u)R_{9,6}(u)为零,它对曲线没有影响,因此,与控制点 p9\mathbf{p}_9 相对的曲线段几乎变成平坦的线段。

img img

img img

img img

img img

因此,我们有以下结论:

增加( 或减少 )权重 wiw_i 的值会使曲线朝着(或远离)控制点 pi\mathbf{p}_i 移动。当 wiw_i 的值变为无穷大时,曲线通过控制点 pi\mathbf{p}_i,而当 wiw_i 为零时,控制点 pi\mathbf{p}_i 对曲线没有影响。

进一步讨论

我们想要更准确地分析改变控制点权重的影响。

NURBS曲线的定义:

C(u)=1i=0nNi,p(u)wii=0nNi,p(u)wiPi\mathbf{C}(u)=\frac{1}{\sum_{i=0}^{n}N_{i,p}(u)w_{i}}\sum_{i=0}^{n}N_{i,p}(u)w_{i}\mathbf{P}_{i}

我们选择控制点 PkP_k ,并观察改变权重 wkw_k 对曲线的影响。

由于 PkP_k 仅在其系数 Nk,p(u)N_{k,p}(u) 非零的区域(即,[uk,uk+p+1)[u_k, u_{k+p+1}) )上对曲线 C(u)C(u) 有影响,因此,在接下来的讨论中,我们假设 uu[uk,uk+p+1)[u_k, u_{k+p+1}) 内。

将涉及wkw_k的项从曲线定义中分离出来,得到下式:

C(u)=1Nk,p(u)wk+iknNi,p(u)wi(Nk,p(u)wkPk+iknNi,p(u)wiPi)\mathbf{C}(u)=\frac{1}{N_{k,p}(u)w_{k}+\sum_{i\neq k}^{n}N_{i,p}(u)w_{i}}\left(N_{k,p}(u)w_{k}\mathbf{P}_{k}+\sum_{i\neq k}^{n}N_{i,p}(u)w_{i}\mathbf{P}_{i}\right)

我们简化一下这个公式,令:

A=Nk,p(u)wkB=ikNi,p(u)wiX=iknNi,p(u)wiPi\begin{aligned}&A=N_{k,p}(u)w_{k}\\&B=\sum_{i\neq k}N_{i,p}(u)w_{i}\\&\mathbf{X}=\sum_{i\neq k}^{n}N_{i,p}(u)w_{i}\mathbf{P}_{i}\end{aligned}

上式曲线的定义变成如下:

C(u)=1A+B(APk+X)\mathbf{C}(u)=\frac{1}{A+B}(A\mathbf{P}_{k}+\mathbf{X})

考虑首先 wk=0w_k = 0 的情况。我们有 A=0\mathbf{A} = 0,曲线上的点,记为 C0(u)C^0(u)

C0(u)=XB\mathbf{C}^0(u)=\frac{\mathbf{X}}{B}

现在计算从这个基本点 C0(u)C^0(u)到任意wkw_k对应的点 C(𝑢)C(𝑢)的向量

C(u)C0(u)=1A+B(APk+X)XB=AA+B(PkXB)=AA+B(PkC0(u))\begin{aligned} \mathbf{C}(u)-\mathbf{C}^{0}(u)& =\frac{1}{A+B}(A\mathbf{P}_{k}+\mathbf{X})-\frac{\mathbf{X}}{B} \\ &={\frac{A}{A+B}}\left(\mathbf{P}_{k}-{\frac{\mathbf{X}}{B}}\right) \\ &=\frac{A}{A+B}\left(\mathbf{P}_{k}-\mathbf{C}^{0}(u)\right) \end{aligned}

这意味着向量 C(u)C0(u)C(u)-C^0(u) 和向量 CkC0(u)C_k-C^0(u) 有相同的方向,前者的长度是后者的 A/(A+B)A/(A+B)

对于 [uk,uk+p+1)[u_k, u_{k+p+1}) 上的每一个 uu 都是如此。因为点 CkC_kC0(u)C^0(u) 是固定的,我们可以认为 C(u)C(u) 位于 Pk\mathbf{P}_kC0(u)C^0(u) 的线上

如果所有的权重都是非负的,那么 AABB 都是非负的,且 A/(A+B)A/(A+B) 的值在0和1之间。也就是说,C(u)C(u) 位于 Pk\mathbf{P}_kC0(u)C^0(u) 的线段上。

如果 wkw_k 趋向无穷大会怎么样?我们将曲线C(u)C(u) 的分子和分母除以 wkw_k,得到如下:

C(u)=1Nk,p(u)wk+ikNi,p(u)wi(Nk,p(u)wkPk+iknNi,p(u)wiPi)=1Nk,p(u)+1wkikNi,p(u)wi(Nk,p(u)Pk+1wkiknNi,p(u)wiPi)\mathbf{C}(u)=\frac{1}{N_{k,p}(u)w_{k}+\sum_{i\neq k}N_{i,p}(u)w_{i}}\left(N_{k,p}(u)w_{k}\mathbf{P}_{k}+\sum_{i\neq k}^{n}N_{i,p}(u)w_{i}\mathbf{P}_{i}\right)\\=\frac{1}{N_{k,p}(u)+\frac{1}{w_{k}}\sum_{i\neq k}N_{i,p}(u)w_{i}}\left(N_{k,p}(u)\mathbf{P}_{k}+\frac{1}{w_{k}}\sum_{i\neq k}^{n}N_{i,p}(u)w_{i}\mathbf{P}_{i}\right)

如果wkw_k趋近于无穷大,那么 1wk\frac{1}{w_k} 趋近于零,则 P(u)\mathbf{P}(u) 趋近于Pk\mathbf{P}_k,即所选控制点。

因此我们有以下结论:

如果 wkw_k 是非负的, C(u)C(u) 总是位于 C0(u)C^0(u)Pk\mathbf{P}_k 的线段上,其中 C0(u)C^0(u) 是对应于 wk=0w_k = 0 的点 , uu[uk,uk+p+1)[u_k, u_{k+p}+1) 范围内。
**当 wkw_k 从0变化到无穷大时, C(u)C(u)C0(u)C^0(u) 移动到 Pk\mathbf{P}_k ,如果 wkw_k 是无穷大, C(u)C(u) 变成 CkC_k **

我们有一个由9个控制点(n=8n = 8)和16个节点(m=15m = 15)定义的6次NURBS曲线,如下所示。

image-20240425104226622

所选的控制点是 P4\mathbf{P}_4。由于 P4\mathbf{P}_4的系数 N4,6(u)N_{4,6}(u)[u4,u4+6+1)=[0,1)[u_4, u_{4+6+1}) = [0,1) 上非零,因此,改变 w4w_4 会影响整条曲线!如下图所示:

img

对应于 u=1/3u = 1/3u=2/3u = 2/3 的点在曲线上以不同的颜色标记。对应于 w4=0w_4 = 0 的曲线是最低的,标记为0。图中显示了 w4w_4 为2、3、4、5、10、20和50的曲线。随着 w4w_4 的值增加,曲线被拉向控制点 P4\mathbf{P}_4。当 w4w_4 增加到50时,曲线变得非常接近P4\mathbf{P}_4

注意,所有对应于 C(13)C(\frac{1}{3}) 的点都在C0(13)C^0(\frac{1}{3}) 和 的P4\mathbf{P}_4线段上,所有对应于C(23)C(\frac{2}{3})的点都在 C0(23)C^0(\frac{2}{3})P4\mathbf{P}_4 的线段上。

随着 w4w_4 的值增加, C(13)C(\frac{1}{3})C(23)C(\frac{2}{3}) 之间的曲线段变短。最终,当 w4w_4 为无穷大时,这个曲线段的长度变为零(即,C(13)C(\frac{1}{3})C(23)C(\frac{2}{3}) 变为与 P4\mathbf{P}_4 相同)。

NURBS曲线:节点插入

由于NURBS曲线是四维空间中的B样条曲线投影到三维空间的结果,因此对NURBS曲线进行节点插入是很容易的。

对NURBS曲线进行节点插入分为三个步骤:
(1)将给定三维空间中的NURBS曲线转换为四维空间中的B样条曲线
(2)对这个四维B样条曲线执行节点插入
(3)将新的控制点集投影回三维空间,得到NURBS曲线的新的一组控制点。

假设我们有 n+1n + 1 个控制点 P0,P1,...,Pn\mathbf{P}_0, \mathbf{P}_1, ..., \mathbf{P}_n,带有权重 w0,w1,...,wnw_0, w_1, ..., w_n,一个节点向量 UU 和一个次数 pp。令 Pi=(xi,yi,zi)\mathbf{P}_i = (x_i, y_i, z_i)

那么,控制点 Piw=(wixi,wiyi,wizi,wi)\mathbf{P}^w_i = ( w_i x_i, w_i y_i, w_i z_i, w_i )0in0 \leq i \leq n,和节点向量 UU 定义了一个四维的 pp 次B样条曲线。向这个四维B样条曲线插入一个新节点 tt,得到一个新的控制点集合 Qiw=(Xi,Yi,Zi,Wi)Q^w_i = ( X_i, Y_i, Z_i, W_i )0in0 \leq i \leq n。然后将它们投影回三维空间,即通过将坐标的前三个分量除以第四个分量,可得到给定 NURBS 曲线的新的控制点集合。

让我们来看一个例子。假设我们有 9 个结点

image-20240427100547095

下面是在xyxy平面上定义的次数为3的NURBS曲线的5个控制点:

image-20240427101204029

下图展示了曲线形状及其基础函数。

img img

我们插入一个新的节点 t=0.4t = 0.4。由于 tt 在节点区间 [u3,u4)[u_3, u_4) 中,并且 NURBS 曲线的次数是3,受影响的控制点是 P3P2P1\mathbf{P}_3、\mathbf{P}_2、\mathbf{P}_1P0\mathbf{P}_0。由于这是一条 NURBS 曲线,通过将所有控制点乘以它们对应的权重来计算齐次坐标,这些新的控制点为Piw\mathbf{P}^w_i

image-20240427101146396

注意,由于 P4\mathbf{P}_4 不受影响,因此未在上表中计算。我们将按以下方式计算 a3a2a_3、a_2a1a_1

a3=tu3u6u3=0.4010=0.4a2=tu2u5u2=0.4010=0.4a1=tu1u4u1=0.400.50=0.8a_{3}=\frac{t-u_{3}}{u_{6}-u_{3}}=\frac{0.4-0}{1-0}=0.4\\a_{2}=\frac{t-u_{2}}{u_{5}-u_{2}}=\frac{0.4-0}{1-0}=0.4\\a_{1}=\frac{t-u_{1}}{u_{4}-u_{1}}=\frac{0.4-0}{0.5-0}=0.8

新的控制点Q3w,Q2w\mathbf{Q}^w_3, \mathbf{Q}^w_2Q1w\mathbf{Q}^w_1 为:

Q3w=(1a3)P2w+a3P3w=(325.6,26,4.4)Q2w=(1a2)P1w+a2P2w=(97.4,142.5,1.9)Q1w=(1a1)P0w+a1P1w=(42,14.8,0.6)\mathbf{Q}_{3}^{w}=(1-a_{3})\mathbf{P}_{2}^{w}+a_{3}\mathbf{P}_{3}^{w}=(325.6,26,4.4)\\\mathbf{Q}_{2}^{w}=(1-a_{2})\mathbf{P}_{1}^{w}+a_{2}\mathbf{P}_{2}^{w}=(97.4,142.5,1.9)\\\mathbf{Q}_{1}^{w}=(1-a_{1})\mathbf{P}_{0}^{w}+a_{1}\mathbf{P}_{1}^{w}=(-42,14.8,0.6)

将这些控制点的前两个分量除以第三个分量投影回二维空间,得到

newP3=(74,5.9)with weight 4.4newP2=(51.3,75)with weight 1.9newP1=(70,24.6)with weight 0.6\begin{array}{rcll}\mathrm{newP}_3&=&(74,5.9)&\mathrm{with~weight~4.4}\\\mathrm{newP}_2&=&(51.3,75)&\mathrm{with~weight~1.9}\\\mathrm{newP}_1&=&(-70,24.6)&\mathrm{with~weight~0.6}\end{array}

下图是生成的NURBS曲线及其基函数:

img img

de Boor(德布尔)算法

一旦我们知道如何插入节点,NURBS曲线的de Boor算法就简单了。

我们只需要将每个控制点乘以它的权重,将NURBS曲线转换为四维空间中的B样条曲线,在这个四维B样条曲线上执行de Boor算法,然后通过将控制点的前三个分量除以第四个分量,并将第四个分量作为新的权重,就可以将四维曲线投影回三维空间

有理贝塞尔曲线

将一个四维B样条曲线投影到 w=1w=1 的超平面会得到一个三维NURBS曲线。
那么如果这个B样条曲线是一个贝塞尔曲线呢?结果就是一个有理贝塞尔曲线

下面的左图显示了一个4阶有理贝塞尔曲线,右图显示了一个三维4阶贝塞尔曲线(红色)及其在超平面 w=1w=1 中的投影有理贝塞尔曲线(蓝色)。

img img

由一组n+1n+1个控制点P0,P1,...,Pn\mathbf{P}_0, \mathbf{P}_1, ..., \mathbf{P}_n定义的曲线是什么?每个控制点对应一个非负权重 wiw_i (即Pi\mathbf{P}_i的权重 wiw_i >= 0)。增加控制点权重Piw(0<=i<=n)\mathbf{P}^w_i (0 <= i <= n),可以使四维B样条曲线退化为一个nn次贝塞尔曲线,它的基函数为 Bn,0(u),Bn,1(u),...,Bn,n(u)B_{n,0}(u),B_{n,1}(u),...,B_{n,n}(u)。将这个贝塞尔曲线投影到平面 w=1w = 1,可以得到:

C(u)=i=0nRi,n(u)Pi\mathbf{C}(u)=\sum_{i=0}^nR_{i,n}(u)\mathbf{P}_i

Ri,n(u)R_{i,n}(u)的定义如下:

Ri,n(u)=Bn,i(u)wij=0nBn,j(u)wjR_{i,n}(u)=\frac{B_{n,i}(u)w_i}{\sum_{j=0}^nB_{n,j}(u)w_j}

这是NURBS曲线的一个特殊情况,称为有理Bézier曲线。

由于有理Bézier曲线是NURBS曲线的一个特例,因此有理Bézier曲线满足所有NURBS曲线具有的重要性质。

然而,由于没有内部节点,有理Bézier曲线不具备局部修改的特性,这意味着修改控制点或其权重将导致整个曲线发生变化。修改控制点的权重将使曲线远离或朝向控制点。

有理贝塞尔曲线:圆锥曲线

由于贝塞尔曲线和B样条曲线是多项式曲线,只能表示抛物线。但NURBS和有理贝塞尔曲线是有理的,它们是否能表示椭圆、圆和双曲线,如果可以的话,应该如何做?

五个条件唯一地确定一个圆锥曲线

由三个不共线的控制点 P0=(U0,V0),P1=(U1,V1) and P2=(U2,V2)\mathbf{P}_0=(U_0,V_0),\mathbf{P}_1=(U_1,V_1)\mathrm{~and~}\mathbf{P}_2=(U_2,V_2) 定义的二次 Bézier曲线表示的是一个抛物线。我们希望扩展这个概念,以定义椭圆和双曲线的部分。

假设圆锥曲线通过P0\mathbf{P}_0P2\mathbf{P}_2并且在P0\mathbf{P}_0P2\mathbf{P}_2处分别与P0P1\mathbf{P}_0\mathbf{P}_1P1P2\mathbf{P}_1\mathbf{P}_2相切,那么圆锥曲线可以用如下二次隐式方程表示,其中六个系数是未知数:

p(x,y)=ax2+2bxy+cy2+2dx+2ey+f=0p(x,y)=ax^2+2bxy+cy^2+2dx+2ey+f=0

如果ff在上述方程中不为零,我们可以将整个方程除以ff

ax2+2bxy+cy2+2dx+2ey+1=0ax^2+2bxy+cy^2+2dx+2ey+1=0

这样我们只有五个未知数!如果ff是零,我们已经有五个未知数了。由于这条曲线通过 P0\mathbf{P}_0点,将P0\mathbf{P}_0的坐标代入上述方程得到:

aU02+2bU0V0+cV02+2dU0+2eV0+1=0aU_0^2+2bU_0V_0+cV_0^2+2dU_0+2eV_0+1=0

方程的梯度计算如下:

p(x,y)=2ax+2by+2d,2bx+2cy+2e\nabla_{p(x,y)}=\langle2ax+2by+2d,2bx+2cy+2e\rangle

切线和梯度在点P0=(U0,V0)\mathbf{P}_0=(U_0,V_0)处互相垂直。

由于梯度的斜率为

bU0+cV0+eaU0+bV0+d\frac{\mathrm{b}U_0+\mathrm{c}V_0+\mathrm{e}}{\mathrm{a}U_0+\mathrm{b}V_0+\mathrm{d}}

在点P0=(U0,V0)\mathbf{P}_0=(U_0,V_0)处的切线的斜率为:

aU0+bV0+dbU0+cV0+e-\frac{\mathrm{a}U_0+\mathrm{b}V_0+\mathrm{d}}{\mathrm{b}U_0+\mathrm{c}V_0+\mathrm{e}}

由于P0P1\mathbf{P}_0\mathbf{P}_1是在P0\mathbf{P}_0处与圆锥曲线相切,且线段P0P1\mathbf{P}_0\mathbf{P}_1的斜率为(V1V0)/(U1U0)(V_1-V_0)/(U_1-U_0),这两个斜率值必须相等。因此,以下关系必须成立:

V1V0U1U0=aU0+bV0+dbU0+cV0+e\frac{V_1-V_0}{U_1-U_0}=-\frac{aU_0+bV_0+d}{bU_0+cV_0+e}

由于圆锥曲线也通过 P2\mathbf{P}_2,因此我们有:

aU22+2bU2V2+cV22+2dU2+2eV2+1=0aU_2^2+2bU_2V_2+cV_2^2+2dU_2+2eV_2+1=0

圆锥曲线在P2\mathbf{P}_2点处与P1P2\mathbf{P}_1\mathbf{P}_2相切,因此有:

V2V1U2U1=aU2+bV2+dbU2+cV2+e\frac{V_{2}-V_{1}}{U_{2}-U_{1}}=-\frac{aU_{2}+bV_{2}+d}{bU_{2}+cV_{2}+e}

现在,我们有四个方程。如果我们能找到另一个条件,我们将得到五个带有五个未知数的线性方程。解这个线性方程组将得到所有五个系数,从而唯一确定了圆锥曲线。

一种方式是再将一个点的坐标代入方程,得到一个类似于控制点 P0\mathbf{P}_0P2\mathbf{P}_2 的方程。

但是,这个点在哪里

这个点应该位于三个控制点构成的三角形内部,以保持凸包性质。
这个点的位置也应该是“规则的”,以便我们可以轻松地改变这个点以生成另一个圆锥曲线。

一种方法是允许这个点位于 P1\mathbf{P}_1P0P2\mathbf{P}_0\mathbf{P}_2 中点的连线上。通过这种方式,将第五个点沿着这条连线移动会生成不同的圆锥曲线,如下所示:

img$

连接点在哪里?

很容易看出,如果选择的点从P0P2\mathbf{P}_0\mathbf{P}_2的中点向P1\mathbf{P}_1移动,定义的椭圆曲线也会向控制点P1\mathbf{P}_1移动。如果点远离P1\mathbf{P}_1,它定义的曲线也会远离P1\mathbf{P}_1。因此,我们猜测,这个移动点的位置可以通过控制P1\mathbf{P}_1的权重来控制。

由于我们只需要一个点,该点受控制点P1\mathbf{P}_1的权重影响,我们可以用控制点P0P1\mathbf{P}_0、\mathbf{P}_1P2\mathbf{P}_2定义的有理贝塞尔曲线,它们的权重分别为1w1、w11。分配给控制点P1\mathbf{P}_1的权重将控制额外点的位置。二次有理贝塞尔曲线的系数如下所示:

B2,0(u)=(1u)2B2,1(u)=2(1u)uB2,2(u)=u2\begin{aligned}&B_{2,0}(u)=&&(1-u)^2\\&B_{2,1}(u)=&&2(1-u)u\\&B_{2,2}(u)=&&u^{2}\end{aligned}

这个二次有理贝塞尔曲线的方程表示为:

C(u)=1(1u)2+2(1u)uw+u2((1u)2P0+2(1u)uwP1+u2P2)\mathbf{C}(u)=\frac{1}{(1-u)^{2}+2(1-u)uw+u^{2}}\Big((1-u)^{2}\mathbf{P}_{0}+2(1-u)uw\mathbf{P}_{1}+u^{2}\mathbf{P}_{2}\Big)

我们将P0\mathbf{P}_0P2\mathbf{P}_2放在xx轴的两侧,并使P0P2\mathbf{P}_0\mathbf{P}_2的中点为坐标原点。因为有理贝塞尔曲线是投影不变的,因此简单的平移和旋转都不会改变曲线的形状。

如下图,我们有P0=P2\mathbf{P}_0 = -\mathbf{P}_2,令P0P2\mathbf{P}_0\mathbf{P}_2的中点为M\mathbf{M},有理贝塞尔曲线与线段MP1\mathbf{M}\mathbf{P}_1相交于X\mathbf{X}点。

img

计算一下u=0.5u=0.5处对应曲线上的点C(u)C(u):

C(0.5)=w1+wP1\mathbf{C}(0.5)=\frac{w}{1+w}\mathbf{P}_1

由于C(0.5)C(0.5)X\mathbf{X}是同一点,X\mathbf{X}和控制点P1\mathbf{P}_1位于通过坐标原点M\mathbf{M}的同一条直线上,且满足:

MX/MP1=w1+w|\overrightarrow{MX}|/|\overrightarrow{MP}_1| = \frac{w}{1+w}

如果w=1w=1,有理贝塞尔曲线就成为了贝塞尔曲线,即抛物线。在这种情况下

MX/MP1=w1+w=1/2|\overrightarrow{MX}|/|\overrightarrow{MP}_1| = \frac{w}{1+w} = 1/2

此时点X\mathbf{X}是线段MP1\mathbf{M}\mathbf{P}_1的中点。

有理贝塞尔曲线如何表示椭圆或双曲线?

从给定圆锥曲线外的点 A\mathbf{A} 开始,画出两条切线,分别在 X\mathbf{X}Y\mathbf{Y} 处与曲线相交,并画一条任意的割线,使其与弦 XY\mathbf{X}\mathbf{Y} 在点 C\mathbf{C} 处相交,并在点 B\mathbf{B}D\mathbf{D} 处与圆锥曲线相交,其中 B\mathbf{B} 在三角形 AXY\mathbf{A}\mathbf{X}\mathbf{Y} 内,如下图所示。如果曲线是椭圆,则这些点的顺序是 ABC\mathbf{A}、\mathbf{B}、\mathbf{C}A\mathbf{A}(图a); 如果它是双曲线,则点 D\mathbf{D} 位于曲线的另一侧上(图b)!

img (a) Ellipseimg (b) Hyperbola

根据投影的关系,我们有:

DCCB=DAAB\frac{|\mathrm{DC}|}{|\mathrm{CB}|}=\frac{|\mathrm{DA}|}{|\mathrm{AB}|}

通过变换可以得到如下关系:

ABCB=DADC\frac{|\mathrm{AB}|}{|\mathrm{CB}|}=\frac{|\mathrm{DA}|}{|\mathrm{DC}|}

因为 CA=CB+BA|\mathbf{CA}| = |\mathbf{CB}| + |\mathbf{BA}|,我们可以按如下方式计算 CB/CA|\mathbf{CB}|/|\mathbf{CA}|

CBCA=CBCB+BA=11+BACB=11+DADC\frac{|\mathrm{CB}|}{|\mathrm{CA}|}=\frac{|\mathrm{CB}|}{|\mathrm{CB}|+|\mathrm{BA}|}=\frac{1}{1+\frac{|\mathrm{BA}|}{|\mathrm{CB}|}}=\frac{1}{1+\frac{|\mathrm{DA}|}{|\mathrm{DC}|}}

如果曲线是一个椭圆(或者双曲线),我们有 DA>DC|DA|>|DC| (或者DA<DC|DA|<|DC|),因此,CB/CA|CB|/|CA| 小于1/2(或大于)。

对于有理贝塞尔曲线,我们有P0=X,P1=A,P2=Y,M=C\mathbf{P}_{0}=\mathbf{X},\mathbf{P}_{1}=\mathbf{A},\mathbf{P}_{2}=\mathbf{Y},\mathbf{M}=\mathbf{C}X=C(0.5)=B\mathbf{X}=\mathbf{C}(0.5)=\mathbf{B}。因此,如果有理贝塞尔曲线表示的是椭圆,有

w1+w=MXMP1<12\frac{w}{1+w}=\frac{|\mathrm{MX}|}{|\mathrm{MP}_1|}<\frac{1}{2}

这说明如果 w<1w < 1,有理贝塞尔曲线表示的是椭圆。如果 w>1w > 1,有理贝塞尔曲线表示的是双曲线。

我们有以下结论:

由三个非共线控制点P0,P1\mathbf{P}_0,\mathbf{P}_1P2\mathbf{P}_2 定义的有理贝塞尔曲线,三个控制点的权重分别为1、ww 和 1,如果 w>1w>1 则该曲线是一个双曲线;如果w=1w=1,该曲线是抛物线;如果w<1w<1,该曲线表示椭圆。

圆弧和圆

最后,我们希望能够表示圆弧和圆。前者使用有理贝塞尔曲线,后者使用NURBS

由于**圆是椭圆的特例,它们可以使用度数为2的有理贝塞尔曲线表示,唯一的权重w<1w<1。**因此,如果我们修改这个权重为特殊值,我们就可以表示圆。

首先,我们知道控制多边形的两条边必须相等,即P0P1=P1P2\mathbf{P}_0\mathbf{P}_1=\mathbf{P}_1\mathbf{P}_2

假设有理贝塞尔曲线表示的圆其圆心和半径分别为 O\mathbf{O}r\mathbf{r},如下图所示。

P0P2P_0P_2的中点为M\mathbf{M},圆与线段 MP1\mathbf{MP}_1 相交于 X\mathbf{X},设 P1\mathbf{P}_1 的角度为 2a2a。我们需要找到一个ww的值,使其满足MX/MP1=w/(1+w)|\mathrm{MX}|/|\mathrm{MP}_1|=w/(1+w),从而确定定义该圆的有理贝塞尔曲线。

img

从直角三角形OMP0OMP_0,我们有OM=rsin(a)|OM| = r \sin(a),因此

MX=OXOM=rrsin(a)=r(1sin(a))|\mathrm{MX}|=|\mathrm{OX}|-|\mathrm{OM}|=r-r\sin(a)=r(1-\sin(a))

根据直角三角形OPoP1OP_oP_1,我们有OP1=r/sin(a)\mathrm{OP}_1=r/\sin(a),因此MP1MP_1为:

MP1=OP1OM=rsin(a)rsin(a)=r(1sin2(a))sin(a)|\mathrm{MP}_1|=|\mathrm{OP}_1|-|\mathrm{OM}|=\frac{r}{\sin(a)}-r\sin(a)=\frac{r(1-\sin^2(a))}{\sin(a)}

现在,我们可以使用MX/MP1|\mathrm{MX}|/|\mathrm{MP}_1|计算,w/(1+w)w/(1+w)

w1+w=MXMP1=sin(a)1+sin(a)\frac{w}{1+w}=\frac{|\mathrm{MX}|}{|\mathrm{MP}_1|}=\frac{\sin(a)}{1+\sin(a)}

求解 ww,我们得到一个令人惊讶的结果:唯一权重值 ww 等于控制点 P1\mathbf{P}_1处的半角的正弦!

w=sin(a)w=\sin(a)

这说明:给定三个控制点P0,P1P_{0},P_{1}P2P_{2},并且满足P0P1=P1P2\mathsf{P}_0\mathsf{P}_1=\mathsf{P}_1\mathsf{P}_2𝑤𝑤P1\mathbf{P}_1的权重,其中𝑎𝑎是控制点P1\mathbf{P}_1角度的一半,此时有理贝塞尔曲线是一个圆。

有两个常见的例子:

四分之一圆

第一个例子是四分之一圆。点P1\mathbf{P}_1处的角度为90°,aa为45度。因此,令w=sin(45°)=20.5/2w = sin(45°) = 20.5/2 将生成一个四分之一圆。下图显示了这个四分之一圆和由相同控制点集定义的 w=1w= 1时的抛物线。

img

三分之一圆

第二个例子是一个圆的三分之一。由于圆可以内切于一个等边三角形,这个圆的三分之一对应的角度为60度,因此,aa为30°。如果令w=sin(30°)=1/2w=sin(30°) = 1/2,那么我们有下面所示的圆弧:

img

完整圆

我们可以取三个1/31/3圆弧或四个1/41/4圆弧,然后将它们拼接在一起组成一个完整的圆,如下图所示。但是,它是如何表示的?它必须是一个二次NURBS曲线。因此我们需要控制点和节点信息。

img

让我们首先考虑等边三角形的情况。

如上图左侧所示。每个等边三角形的顶点都是先前描述的权重为1/21/2 的控制点。
左下方的1/31/3由控制点 P0\mathbf{P}_0P1\mathbf{P}_1P2\mathbf{P}_2 定义;
顶部的1/31/3P2\mathbf{P}_2P3 和 P4\mathbf{P}_4 定义;
右下方的1/31/3P4\mathbf{P}_4P5\mathbf{P}_5P6=P0\mathbf{P}_6 = \mathbf{P}_0 定义。

接下来,我们要研究节点。由于 n=6p=2n = 6,p = 2,那么 m=6+2+1m = 6 + 2 + 1(即,10 个节点)。在这 10 个节点中,前三个和后三个是 0 和 1(即u0=u1=u2=0u7=u8=u9=1u_0 = u_1 = u_2 = 0,u_7 = u_8 = u_9 = 1)。

到目前为止,未知的节点是 u3u4u5u_3,u_4,u_5u6u_6

一种方式是将1/31/32/32/3作为内部节点,因为在区间 [0,1/3][1/3,2/3][0, 1/3],[1/3, 2/3][2/3,1][2/3, 1] 上的圆弧将整个圆分成三个等长的圆弧。因此,我们还需要两个节点。

在上图中,你会看到控制点P2\mathbf{P}_2位于圆上,其位置是其长度的1/31/3

我们如何让曲线通过一个控制点呢?可以采用de Boor算法。当计算一个B样条/NURBS曲线上对应于uu的点时,我们将uu多次插入,直到uu的重数是pp,其中pp是曲线的次数。当最后一次插入uu时,曲线上对应的点实际上是一个(新)控制点P2\mathbf{P}_2

这个结论告诉我们,如果1/31/3的重数是2,那么曲线上对应的点是一个控制点。

因此可以得到u3=u4=1/3u_3 = u_4 = 1/3u5=u6=2/3u_5 = u_6 = 2/3

我们有结论:

要用等边三角形形定义一个完整的圆,我们要有节点0,0,0,1/3,1/3,2/3,2/3,1,1,10,0,0,1/3,1/3,2/3,2/3,1,1,1
要用一个正方形定义一个完整的圆,我们需要如图所示的九个控制点和节点向量0,0,0,1/4,1/4,1/2,1/2,3/4,3/4,1,1,10,0,0,1/4,1/4,1/2,1/2,3/4,3/4,1,1,1

那么,如何用一个有nn条边的正多边形来定义一个完整的圆?