0

我正在用 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。

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

4

2 回答 2

1

执行此操作的常用方法是添加两个端点的第二个副本...因此,如果您有一条通过ABCD的样条线,那么您将计算样条线 AABCDD

于 2013-06-11T12:23:56.497 回答
0

借助此处找到的公式,设法实施了一个不错的解决方案:http: //www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/Parametrics.html

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

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

于 2013-06-18T07:27:24.590 回答