INS*_*INS 6 algorithm math spline computational-geometry
我正在开发一个涉及从一组定义的点(数万个点)创建样条线的项目.
我首先为前1000个点创建样条曲线并使用箭头模拟该路径上的"驱动"(使用样条上的切线和当前点绘制).当我接近路径的末端时,我接下来的1000个点并创建一个新的样条曲线并继续我的"驾驶".
我遇到的问题是样条曲线(前一个样条曲线和当前样条曲线)最后不匹配.通过不匹配我的意思是它们没有相同的切线(一阶导数不匹配)并且前一个样条曲线的最后一个点与新样条曲线上的第一个点之间存在差异(这是因为我没有使用插值样条曲线但平滑样条曲线 - 参见下面的注1).当切换到新创建的样条曲线时,这使我的箭头在样条曲线的末尾"跳跃".
注1:我没有使用插值样条.我正在使用平滑的样条线.有关详细信息,请参见此处和此处.这意味着,一套作为输入给出可能不在所产生的样点(在我的情况下,他们都相当接近样-但通常不是花键).
注2:使用插值样条是不可能的,因为我在用于计算样条曲线的数据中有很多噪声.
注3:在具有2 GB RAM的3Ghz PC(我们的应用程序目标平台)上计算整个点集的样条曲线需要花费大量时间(超过30秒); 这样做也是不可能的.
我有兴趣在切换样条线时克服那些不必要的"跳跃".
所以我的问题是:
谢谢你的任何想法,
尤利安
诚然,这是一个相当简单的建议,但一个明显的技巧是拟合重叠的点子集而不是不同的点子集,然后在重叠区域中生成的样条线之间进行插值。
例如,为点 1-1000 生成平滑样条线。当您在 1-900 之间制作动画时,生成 901-1900 之间的下一条样条线。对于 901 和 1000 之间的区域,使用两个样条线中相应位置的加权组合,其中 901 处的权重为 1:0,1000 处的权重为 0:1。1801-1900 也是如此,依此类推。
我猜想一个简单的线性插值就足够了,并且边距可能不需要很大,但您可以根据经验确定这一点。