gpt4 book ai didi

c++ - 了解曲线全局逼近算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:05:33 26 4
gpt4 key购买 nike

问题描述

我正在尝试理解和实现曲线全局近似,如此处所建议的:

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. 首先,变量命名存在一些问题。具体来说,我被 ![u](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bu%7D) 的事实绊倒了。作为函数参数以及输入和 ![u_0 - u_k](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bfoo%7D) .目前我假设,首先我决定我想为我的近似找到多少结 vector 。假设我想要 10 个。那么我的参数是:

enter image description here

我假设这是输入参数 ![u](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bu%7D)在系数计算算法中?

  1. ![u](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bu%7D)的原因把我绊倒是因为那句话:

Let u be in knot span enter image description here

如果输入参数![u](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bu%7D)是结 vector 的元素之一 ![u_0 - u_k](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bfoo%7D) ,那么就不需要间隔了。所以我假设 ![u](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bu%7D)实际上是这些元素之一( enter image description here ?),定义较早:

enter image description here

这个假设是否正确?

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

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

但我还需要为所有参数计算 N ![u](https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7Bu%7D)对应于我的参数enter image description here这又对应于数据点。所以得到的矩阵是 d 维 ( n x n )。这与前面提到的 ( n x ( h - 1 ) ) 不对应。

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

结论

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

附加媒体

calculation of N


Calculate approximating curve

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

最佳答案

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

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

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

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

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

希望我的回答能消除您的一些困惑。

关于c++ - 了解曲线全局逼近算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58562439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com