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

时间:2013-06-11 11:33:08

标签: c++ spline catmull-rom-curve

我在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/这很好地解释了如何进行二次插值。但是我不知道如何根据我的情况调整这个,我想要计算一个新的Point而不仅仅是y。

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

通常的方法是添加两个端点的第二个副本...因此,如果样条曲线通过 ABCD ,那么您将计算样条曲线 AABCDD < /强>

答案 1 :(得分:0)

通过此处找到的公式管理实施体面的解决方案:http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/Parametrics.html

它们还提供了一个很好的Java小程序来检查不同的参数。

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