2

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

4

1 回答 1

1

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

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

如果您有数百个点,那么您可能只希望 B 样条曲线靠近数据点。然后,您正在寻找的算法是最小二乘拟合。你可以在网上找到很多关于这个领域的文章(例如:link1)。使用 B 样条曲线进行最小二乘拟合的典型算法将涉及以下步骤:

1) 为您的数据点选择参数化。弦长参数化通常是最小二乘拟合的不错选择。
2) 选择 B 样条的阶数。通常,我们使用 3 阶,即三次 B 样条。
3) 确定 B 样条的控制点数量。
4) 根据前 3 步的信息确定节点向量。
5) 求解一个线性方程组以找到 B 样条的控制点。

于 2014-12-20T08:16:27.163 回答