B样条曲线和贝塞尔曲线或多或少是同一事物的平行发明。Beziers尝试从拟合切线的想法开始的地方。B样条线从基函数的概念开始。NURB样条曲线(或实际上的有理部分)只是B样条曲线的概括,因此您可以描述准确的圆锥截面*,因为它们在工程中特别有用。
首先,让我们从简单的NURB Spline术语开始。这些曲线的原理与贝塞尔曲线有所不同。首先是跨度的概念。跨度大致等于整个Bezier样条曲线,只是在nurbs中可以有任意多个跨度。
图1:一立方NURBS跨度。这在配方上有点不典型
每个跨度由曲线度+ 1个控制点**组成。每条曲线可以包含任意数量的点。每个连续的跨度通过在列表中删除一个点并再增加一个点来重用先前跨度中的点。因此,制作更复杂的曲线就像将更多点附加到曲线一样容易。
注意:图像曲线有些非典型地参数化,将在下一节中解释这的含义。当我采取打结的概念。这只是解释曲线如何粘合在一起的简便方法。
图像2:彼此相继2立方跨度,每个跨度使用4个点。它们一起形成一条曲线。他们彼此分享大多数分数。
到目前为止,我们可能已经回答了有关增加复杂性的两个问题。但我想补充一点,该方案比贝塞尔曲线能确保更好的连续性。另外,您可以使形成船体的点阵列循环。形成闭合曲线。
图片3:封闭的立方NURBS曲面的跨度与点数一样多。每种颜色是一个跨度。
参数化
直到这一点,人们才可以说将跨度串在一起是一种技巧,就像“缝制”贝塞尔曲线一样。但是有区别。曲线沿其长度参数化。因此,曲线不是分开的,它们不会像Beziers那样在每个跨度上以0到1的形式插值。相反,基础曲线具有可定制的参数范围。参数存储在称为“结”的位置,每个结在序列中可以具有任意递增的值。因此,您可以参数化整个曲线u的范围为0-1或0到12。参数化也不必是统一的。
此参数化会更改曲线的形状。为什么这会有用?好吧,您可以沿曲线调整张力一。或者,您可以将曲线的长度编码为U参数。一种特殊用途是使NURBS曲线完全或仅部分地像Bezier曲线一样工作(例如,bezier像两端一样,而不像中间那样)。
图片4:相同点的不同结序列。绿色的NURBS曲线对应于参数范围为0-2(而不是0-1)的Bezier曲线
好,那是什么结?它们只是基础函数的范围。由于具有4个点的三次b样条具有4个插值函数,因此需要8节。只能绘制3个功能重叠且总和不超过1.0的区域。
图像5:2个不同的基函数,像bezier一样,并且段参数统一,扩展到0-1范围。
现在,我们主要描述了问题1的答案。未定义范围,您可以根据需要扩展基础函数。最后,结向量仅产生基函数的参数范围。还有另一件事决定着曲线的形状,那就是权重向量。但这是另一个故事。
*在这种情况下,这种有理数意味着NURBS曲线不必是多项式,因为您不能用多项式描述一个圆。
**可以定义其他类型的点。