前面已经写过了如何根据控制点绘制NURBS曲线:
三次 Bspline(B样条曲线) NURBS曲线的绘制 matlab_nurbs三次样条-CSDN博客
但有时得到的是数据点或者称为型值点,这个时候生成NURBS曲线略有不同,具体而言包括以下三个步骤:
1)计算节点矢量:
若要让一条k次 NURBS 曲线通过一组给定的型值点 Pi (0,1,2,..., n),不仅要保证曲线的首末端点与型值点重合,还应保证Pi 依次与构造曲线定义域内的节点uk+i(0, 1, 2,..., n)一一对应。通常需要对型值点进行参数化处理,以确定参数值uk+i 。
对于三次 NURBS 插值曲线,常用的参数化方法有以下四种:
(1)规范均匀参数化法
(2)规范积累弦长参数化法
(3)规范向心参数化法
(4)规范修正弦长参数化法
2)计算边界条件:
下式表示的线性方程组由n+1个矢量方程组成,具有n+3个未知控制顶点。
上述方程组中的节点矢量已确定,但未知顶点数大于方程数,因此求解该方程组,需要增加两个适当的边界条件。常用的边界条件有以下三种:
(1)切矢条件
要求首末端点的切线方向固定,满足下式所表示的附加方程:
( 2)自由端点条件
自由端点条件要求首末端点具有零曲率,满足下式所表示的附加方程:
(3)闭曲线条件
要求曲线首末端点重合且二阶连续,满足下式所表示的附加方程:
3)反算控制顶点:
采用切矢边界条件,取型值点两端点的重复度为k+1;对于三次 NURBS 曲线,其首末端点即为首末控制顶点。根据边界条件所满足的附加方程,可得到如下线性方程组:
求解上述线性方程组,即可得到所有未知的控制顶点。
通过以上方法,可以计算出给定型值点的节点矢量和控制顶点。只需根据要求选取合适的权因子,即可最终确定 NURBS 曲线的表达式。
计算实例:
假设我们选定的数据点在一条圆柱螺旋线上: