如何插值不描述函数的N个点

4
假设我有n个点,也假设这些点是有序的,但不一定构成一个函数。如果这些点不描述一个函数,我想知道如何进行插值?例如,这是原始点集: Points to Interpolate 我希望得到以下结果:

Interpolated Points

请注意,仅使用样条曲线是不起作用的,因为这些点并不构成一个函数,而且使用贝塞尔曲线也不起作用,因为它们不能插值这些点(只能靠近它们)。我该怎么做才能得到这个效果?有没有相应的算法可供使用?


只是一个更新。由于我参考的被接受答案的链接已经失效,所以我将分享一篇我根据那个写的文章,来帮助其他人解决这个问题。 在WPF中使用贝塞尔曲线插值2D点 最终算法的实时实现。Javascript

这个平面上的曲线可以由一对函数 x(t)y(t) 参数化。你是否已知道遍历这些点的顺序,还是需要确定呢? - A. Webb
2个回答

6

非常感谢,贝塞尔曲线插值对我来说效果非常好。我只做了一个小改动以适应开放曲线(而不是闭合曲线)。 - Raúl Otaño

1

这个答案解决了问题本身存在的一些概念性问题。我并不打算把它作为一个完整的答案。

首先,在给定的情况下,总是存在一个函数。在数学上,你可以将曲线描述为从实数到你的空间的函数,大致表示“时间”。这通常被称为曲线的参数表示法。我们将函数写成f(t) =( x(t), y(t) ),其中x(t)y(t)是各自的参数函数。

问题在于,你拥有的函数可能不是你想要的函数。每个这种类型的问题,为了有希望得到答案,都必须明确说明哪些类别的函数是可接受的答案。仅仅说“函数”没有多少意义。问题缺少一个声明可接受的函数类别的陈述。虽然提到了样条曲线,但让我们继续探讨。在给定一类样条曲线(双三次样条曲线很常见)的情况下,通常只能适应样条曲线上的若干点,而不能适应任意数量的点。因此,你需要的是分段样条函数类别,也就是一系列的样条曲线。

一旦您有一个可接受的函数类,您还需要决定如何选择它们。您似乎所陈述的条件是您希望样条曲线通过给定点。这是一个常见的条件,但并不是唯一的条件。其他条件包括最小化曲率、最小化长度、最小化点到曲线的总距离等。拟合条件也是问题陈述的一部分。

总之,听起来像是您想要拟合一个分段样条曲线以通过一系列点。现在请查看其他答案,因为那就是它们回答的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接