我正在试着理解NURBS曲线(待会儿曲面!)但我很难理解它内在运作的基本原理。有人能给我解释几件事吗?由于我来自Bezier曲线,比较这两条曲线将特别有用。
u是否也从0到1?发布于 2015-08-25 16:12:23
B样条和贝齐尔是大致相同事物的平行发明。贝齐尔试图从拟合切线的想法开始。B样条从基函数的概念开始。NURB样条(实际上是有理的部分)只是B样条的推广,所以你可以描述精确的二次曲线*,因为它们在工程上特别感兴趣。
首先,让我们从一个简单的NURB样条术语开始。这些曲线的基本原理与贝齐尔有一点不同。首先是跨度的概念。一个跨度大致相当于一个完整的Bezier样条,除非在nurbs中,你可以有任意数量的跨度。

图1:一个立方体NURBS跨度。这在配方上有点不典型。
每个跨度由曲线度+1个控制点**组成。每条曲线都可以由任意数量的点组成。每一个连续的跨度都重复使用前一个跨度中的点数,方法是删除一个点,在列表中多取一个点。因此,做更复杂的曲线就像在曲线上附加更多的点一样容易。
注意:图像曲线有点不典型的参数化,我将在下一节解释这意味着什么。当我带着结的概念。这只是一个更简单的方法来解释曲线如何粘合在一起。

图2: 2立方跨度后,每个跨度使用4点。它们合在一起形成一条曲线。他们彼此分享最多的观点。
到目前为止,我们可能已经回答了关于增加复杂性的第二个问题。但我想补充一点,这个方案比bezier曲线更能保证连续性。此外,还可以使形成船体的点阵循环。形成一个封闭的曲线。

图3:一个封闭的立方体NURBS曲面的跨度和它的点数一样多。每种颜色只有一个跨度。
直到这一点,人们可以说,串在一起的跨度是一个技巧,就像“缝纫”的贝塞尔曲线。但两者有区别。曲线沿其长度是参数化的。因此,曲线不是分开的,它们不像贝齐尔那样,在每个跨度上插值0到1。相反,底层曲线有一个可缓冲的参数范围。该参数存储在一个称为纽结的东西中,每个节点都可以在序列中具有任意的递增值。所以你可以参数化整个曲线u范围到0-1或0到12。参数化也不一定是一致的。
这种参数化改变了曲线的形状。这有什么用呢?你可以调整曲线上的张力。或者你可以将曲线的长度编码成U参数。一个特殊的用途是使NURBS曲线完全或部分地像Bezier曲线(例如,bezier曲线在末端,而不是在中间)。

图4:相同的点,不同的结序。绿色NURBS曲线对应于参数范围为0-2而不是0-1的Bezier曲线。
好的,结是什么?它们只是基函数的范围。4点三次B样条具有4个插值函数,需要8节。只有3个功能重叠的区域才能画出一条线。

图像5: 2个不同的基函数,一个贝塞尔样和一个统一的分段参数化,扩展到0-1范围.
现在我们已经描述了问题1的答案,范围没有定义,你可以根据你认为合适的范围来扩展基础函数。最后,节点向量简单地给出基函数的参数范围。还有一件事决定了曲线的形状,那就是权向量。但另一个故事要在其他地方讲述。
*这种理性在这种情况下意味着NURBS曲线不一定是多项式,因为你不能用多项式来描述一个圆。
**我们可以定义其他类型的点。
https://computergraphics.stackexchange.com/questions/335
复制相似问题