【问题标题】:Understanding Curve Global Approximation algorithm了解曲线全局逼近算法
【发布时间】:2019-10-25 16:32:20
【问题描述】:

问题描述

我正在尝试理解和实施曲线全局近似,如下所示:

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. 首先,变量命名存在一些问题。具体来说,我被作为函数参数以及输入和这一事实绊倒了。目前我假设,首先我决定要找到多少个节点向量来进行近似。假设我想要 10 个。那么我的参数是:

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

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

u在结跨度

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

这个假设正确吗?

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

将N[0..n]初始化为0; // 初始化

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

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

结论

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

其他媒体


在最后一张图片中应该说,"[...] used before the calculation of Q"

【问题讨论】:

  • mathoverflow.netmath.stackexchange.com 可能更适合这个问题。据我所知,它没有任何 C++(标签除外)。
  • 诚然,我不确定哪个 SE 最适合这个。我之所以选择 SO,是因为这些问题专门针对这两种算法实现,而且我想使用 Eigen 来实现它。
  • 那么我认为您需要开始实施它并就出现的问题提出具体问题。事实上,我认为它会被关闭。您的问题看起来与数学相关,而不是与实现相关 - 但我不太了解数学,所以我可能是错的。
  • 如果我不清楚示例算法的关键问题w.r.t.,我不明白我应该如何开始实施。
  • 这就是为什么我建议你从数学论坛开始。在那里获得帮助并返回这里解决实施问题。我敢肯定eigen 对他们来说并不陌生。

标签: c++ algorithm eigen spline bspline


【解决方案1】:

第二个链接告诉您如何在参数 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 之间)。

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

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

【讨论】:

  • 是和不是。首先,为你的努力投上一票,因为我认为有些事情已经得到证实。但尤其是 w.r.t. N - 我提到自己,我假设第二个链接中的算法计算 N 的一行。但是该行是用 n 元素初始化的,这导致n 列。根据第一个链接所示的矩阵 N,N 应该有 n 行,但有 p - 1 列。按照这两种算法,我得到了一个具有 n x n 维度的 N,这就是我卡住的地方。
  • 在第二个链接中,(n+1) 是控制点的数量,而在第一个链接中,(n+1) 是数据点的数量。顺便说一句,矩阵 N 有 (h-1) 列,而不是 (p-1) 列。
  • 我认为这可能对我有帮助。我会查看您的解释 - 如果我能解决我的问题并确认您的回复,您的回答将被接受。
  • 我认为问题在于节点向量的生成。您可以通过在前面附加 0 p+1 次和在后面附加 1 p+1 次来生成向量。您还可以从所需的控制点数量得出向量中元素的总数,因此您可以插入空白的内部元素。但是,当您查看我在此评论下方发布的它们的结生成时,您会看到它们通过根据度数对参数集条目进行平均来生成结向量。并且参数集显然具有与数据集一样多的元素。我似乎无法将两者结合在一起。
猜你喜欢
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 2023-03-29
相关资源
最近更新 更多