创建连续样条线/在样条线之间平滑过渡

时间:2011-06-16 08:54:34

标签: algorithm math computational-geometry spline

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

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

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

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

NOTE2 :使用插值样条线是不可能的,因为我在用于计算样条曲线的数据中有很多噪音。

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

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

所以我的问题是:

  • 是否有一些方法/算法可以顺利“跳转”/过渡到新样条线?
  • 我可以使用特殊类型的样条曲线来解决这个问题吗? (这是我到目前为止没有做出相当大改进的尝试)。

感谢您的任何想法,

尤利安

1 个答案:

答案 0 :(得分:4)

不可否认,这是一个非常简单的建议,但是一个明显的方法就是适合重叠而不是不同的点子集,然后在重叠区域中生成的样条线之间进行插值。

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

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