我在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。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
通常的方法是添加两个端点的第二个副本...因此,如果样条曲线通过 ABCD ,那么您将计算样条曲线 AABCDD < /强>
答案 1 :(得分:0)
通过此处找到的公式管理实施体面的解决方案:http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/Parametrics.html
它们还提供了一个很好的Java小程序来检查不同的参数。
对于我的问题,我将t1值设置为0.5并检查t是否高于/低于此阈值,因为我只想绘制曲线的一个段!工作得很好。