从点列表创建一个平滑的nurb

时间:2014-12-19 07:37:25

标签: math graphics nurbs

我正在开发一个3D图形应用程序,用户可以在其中绘制曲线。 我记录了用户绘制的曲线,我想从记录的点集中创建一个平滑的nurb。 我尝试使用openNurbs库,但我找不到使用库进行拟合的方法。 我怎样才能将一组积分装到nurb?

1 个答案:

答案 0 :(得分:1)

首先,我认为你不需要nurbs。将B样条曲线拟合到数据点应该足够好了。

如果您只有几十个点,那么您可能希望B样条曲线完全通过这些数据点。在这种情况下,您正在寻找样条插值算法。如果是这种情况,您可以使用Catmull Rom样条曲线或Overhauser样条曲线来插值数据点。两者都将创建C1三次样条,并且两者都易于实现,无需求解线性方程组。

如果您有几百个点,那么您可能只希望B样条曲线靠近数据点。然后,您正在寻找的算法是最小二乘拟合。您可以在线查找该领域的大量文章(例如:link1)。具有B样条曲线的最小二乘拟合的典型算法将涉及以下步骤:

1)为数据点选择参数化。弦长参数化通常是最小二乘拟合的好选择 2)选择B样条的度数。通常,我们使用3度,即立方B样条。
3)确定B样条的控制点数量 4)根据前3个步骤中的信息确定结矢量 5)求解线性方程组以找到B样条的控制点。