三次样条:开始/结束段插值



我正在用c++做样条插值。我从这里使用的代码:http://tehc0dez.blogspot.ch/2010/04/nice-curves-catmullrom-spline-in-c.html(代码也链接在该页上,它在github上)。这个应用程序对闭合轮廓很好,因为它复制了前三个点到最后。

但在我的情况下,我需要能够做出一个"开放"的形状-或者更确切地说线-其中第一个点和最后一个点没有连接。

我的理解是,由于Catmull-Rom样条是三次的,如果不添加任何额外的点,我将无法计算第一个和最后一个片段的插值点。

我读到一个常见的方法来插值点在这两个部分是使用二次插值。

不幸的是,我不知道该怎么做。我已经知道如何做二次贝塞尔近似,但这不是我想做的,因为我不想引入任何额外的支撑点。

我发现这个网站:http://dafeda.wordpress.com/2010/09/01/newtons-divided-difference-polynomial-quadratic-interpolation/它很好地解释了如何做二次插值。但我不知道如何适应我的情况,我想计算一个新的点,而不仅仅是y。

任何帮助都会很感激。谢谢!

通常的方法是添加两个结束点的第二个副本…所以如果你有一条样条经过 a - b - c - d 那么你就要计算样条 a - a - b - c - d - d

通过下面的公式实现了一个不错的解决方案:http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/Parametrics.html

他们还提供了一个很好的Java applet来检查不同的参数。

对于我的问题,我将t1值设置为0.5,并检查t是否高于/低于此阈值,因为我只想绘制曲线的一段!很好。

最新更新