了解曲线全局逼近算法

Understanding Curve Global Approximation algorithm

问题描述

我正在尝试理解和实施曲线全局逼近,如此处所提议:

https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/INT-APP/CURVE-APP-global.html

要实现该算法,必须计算基函数系数,如下所述:

https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-curve-coef.html

我无法理解一些细节。

  1. 首先变量命名有一些问题。具体来说,我被 as function parameter as well as input and 的事实绊倒了。目前我假设,首先我决定我想为我的近似找到多少结向量。假设我想要 10。那么我的参数是:

我假设这是系数计算算法中的输入参数

  1. 这个把我绊倒的原因是因为一句话:

Let u be in knot span

如果输入参数是结向量的元素之一,则不需要间隔。所以我假设 实际上是这些元素之一( ?),定义较早:

这个假设正确吗?

  1. 最重要的问题。我正在尝试让我的 N 与两个 link 中的第一个一起工作, 全局曲线近似 的实现.当我查看矩阵维度(其中提到了 P、Q、N 维度)时,似乎 N 应该有 n 行和 h-1 列。这意味着,N 的行数等于数据点的数量,列数等于曲线度数减一。但是,当我查看第二个 link 中 N 的实现细节时,N 行是用 n 元素初始化的。我指的是:

Initialize N[0..n] to 0; // initialization

但我还需要为所有参数 计算 N,这些参数对应于我的参数 ,而这些参数又对应于数据点。所以得到的矩阵是d维( n x n )。这不对应前面提到的( n x ( h - 1 ) ).

更进一步,在描述近似算法的 link 中,N 用于计算 Q。但是紧接着我被要求计算我应该已经拥有的 N,否则我将如何计算问?这还是同一个N吗?我是否必须为所需的控制点数量计算新的 N?

结论

如果有人对此有任何有用的见解 - 请分享。我的目标是使用 C++ 和 Eigen 来实现它,因为它对解决 M * P = Q 和矩阵计算很有用 w.r.t. 。目前我不知所措。一切似乎或多或少都清楚了,除了N,尤其是它的维度以及是否需要多次计算。

其他媒体


在最后一张图中应该说的是,"[...]在计算Q之前使用过"

第二个link告诉你如何计算参数u处的B样条曲线的基函数,其中B样条曲线由其度数定义,结向量[u0,...um ] 和控制点。所以,对于你的第一个问题,如果你想在你的结向量中有 10 个结,那么典型的结向量将如下所示:

[0, 0, 0, 0, 0.3, 0.7, 1, 1, 1, 1]

这将是一条具有 6 个控制点的 3 次 B 样条曲线。

对于你的第二个问题,输入参数u一般不是结[u0, u1,...um]中的一个。输入参数 u 只是我们想要评估 B 样条曲线的参数。 u 的值实际上在 0 到 1 之间变化(假设结向量范围也是从 0 到 1)。

对于您的第 3 个问题,N(在第一个 link 中)表示一个矩阵,其中该矩阵的每个元素都是 Ni,p(tj)。所以,基本上从第二个 link 计算的 N[] 数组实际上是第一个 link 中矩阵 N 的行向量。

希望我的回答已经消除了您的一些困惑。