algorithm - 创建连续的样条曲线/在样条曲线之间进行平滑过渡

标签 algorithm math computational-geometry spline

我正在从事一个项目,该项目涉及从一组定义的点(数万个点)创建样条曲线。

我首先为前 1000 个点创建一条样条曲线,并用箭头模拟在该路径上“行驶”(它是使用样条曲线上的切线和当前点绘制的)。当我接近路径的尽头时,我采用接下来的 1000 个点并创建一个新的样条曲线并继续我的“驾驶”。

我遇到的问题是样条曲线(以前的样条曲线和当前样条曲线)在最后不匹配。不匹配我的意思是它们没有相同的切线(一阶导数不匹配)并且前一个样条曲线的最后一点和新样条曲线的第一个点之间存在差异(这是因为我没有使用插值样条曲线但平滑样条曲线 - 请参见下面的注 1)。当切换到新创建的样条曲线时,这会使我的箭头在样条曲线的末尾“跳跃”。

注意 1:我使用插值样条。我正在使用平滑样条曲线。参见 herehere更多细节。这意味着作为输入给出的点集可能不在生成的样条曲线上(在我的例子中,它们非常接近样条曲线 - 但通常在样条曲线上)。

注意 2:使用插值样条是不可能的,因为我在用于计算样条的数据中有很多噪声。

注意 3:在具有 2 GB RAM(我们的应用程序目标平台)的 3Ghz PC 上,为整个点集计算样条曲线需要花费大量时间(超过 30 秒);所以这样做也不行。

我有兴趣在切换样条曲线时克服不需要的“跳跃”。

所以我的问题是:

  • 是否有一些方法/算法可以平滑地“跳转”/过渡到新的样条曲线?
  • 我可以用特殊类型的样条做些什么来克服这个问题吗? (这是我迄今为止尝试过的方法,但没有显着改善)。

感谢您的任何想法,

尤利安

最佳答案

诚然,这是一个相当简单的建议,但一个明显的技巧是拟合重叠而不是不同的点子集,然后在重叠区域中生成的样条之间进行插值。

例如,为点 1-1000 生成平滑样条。当您从 1-900 制作动画时,从 901-1900 生成下一个样条。对于901和1000之间的区域,使用两个样条中相应位置的加权组合,其中权重在901处为1:0,在1000处为0:1。1801-1900等相同。

我猜想一个简单的线性插值就足够了,而且边距可能不需要很大,但您可以根据经验来确定。

关于algorithm - 创建连续的样条曲线/在样条曲线之间进行平滑过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6369306/

相关文章:

algorithm - 如何在不使用任何循环的情况下检查连续值

algorithm - 多边形添加算法

c# - 两个网格系统叠加的算法

c# - 在二维点集中寻找洞?

java - 根据给定的数字数组创建几乎唯一的标识符

java - 合并未排序数组的集合以查找共同元素

c# - 分组连续相同的项目 : IEnumerable<T> to IEnumerable<IEnumerable<T>>

c++ - 如何找到数字总和的模数?

python - 如何在 Python 中存储计算结果,这样我的程序就不会对同一事物进行两次计算?

javascript - 生成 Javascript 对象键/值的排列