6

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

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

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

注意1 :我没有使用插值样条线我正在使用平滑样条曲线。有关更多详细信息,请参见此处此处。这意味着作为输入给出的点集可能不在结果样条线上(在我的情况下,它们非常接近样条线 - 但通常不在样条线上)。

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

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

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

所以我的问题是:

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

谢谢你的任何想法,

尤利安

4

1 回答 1

4

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

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

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

于 2011-06-16T09:15:10.373 回答