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

Algorithm 创建连续样条曲线/在样条曲线之间进行平滑过渡,algorithm,math,computational-geometry,spline,Algorithm,Math,Computational Geometry,Spline,我正在从事一个项目,该项目涉及从定义的一组点(数万个点)创建样条曲线 我首先为前1000个点创建一条样条曲线,并用箭头模拟该路径上的“驱动”(使用切线和样条曲线上的当前点绘制)。当我接近路径的终点时,我取下1000个点,创建一条新的样条曲线,然后继续我的“驱动” 我遇到的问题是,样条曲线(以前的样条曲线和当前的样条曲线)在末尾不匹配。通过不匹配,我的意思是它们没有相同的切线(一阶导数不匹配),并且上一条样条曲线的最后一点和新样条曲线上的第一点之间存在差异(这是因为我使用的不是插值样条曲线,而是平

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

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

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

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

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

注3:在3Ghz PC上,使用2GB RAM(我们的应用目标平台)计算整组点的样条曲线需要大量时间(超过30秒);所以这样做也是不可能的

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

因此,我的问题是:

  • 是否有一些方法/算法可以平滑“跳跃”/过渡到新样条线
  • 我可以用特殊类型的样条曲线来克服这个问题吗?(这是我迄今为止所尝试的,但没有明显的改进)
谢谢你的建议


Iulian

无可否认,这是一个相当简单的建议,但一个明显的缺陷是拟合重叠而非不同的点子集,然后在重叠区域的结果样条曲线之间插值

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


我猜一个简单的线性插值就足够了,利润可能不需要很大,但你可以根据经验来确定;虽然它很简单,但可能证明它是有效的。我要试一试。在这种情况下,这意味着在“切换”到下一条之前,我将使用两条样条曲线。由于在数学级别上使用样条曲线方程来实现我想要的可能非常困难,因此我可能最终会进行从一条样条曲线到另一条样条曲线的平滑转换。如果没有其他答案,这可能是可以接受的答案。您也可以插值重叠部分的控制点,将重叠样条线组合成一个大的样条线,假设节点向量的相应部分合理对齐。它与逐点插值不同,除非实际将样条曲线与过渡权重函数相乘(这样做会产生更高阶的样条曲线,这可能是您不想要的),但它非常接近,可能值得进行一些实验,以查看结果是否可接受。(补充我先前的评论)这项技术还意味着您可以在预计算阶段做更多的工作,因为它不会在运行时增加开销。因此,您可能可以通过使用更多的重叠来提高拟合质量;例如,从点0-1000、100-1100、200-1200……生成样条曲线,并将所有这些点组合起来。所有额外的工作都在拟合时进行,在拟合时没有额外的工作评估时间。