假设我有点n
,也假设这些点有一个顺序,而这些点不一定有功能。我想知道如果这些点不描述函数,如何对它们进行插值?例如,这将是原始点:
我希望这个结果:
请注意,仅使用样条线不起作用,因为这些点不会产生函数,并且使用贝塞尔曲线也不起作用,因为它们不会对点进行插值(仅通过它们附近)。我该怎么做才能得到这个?有算法吗?
只是一个更新。由于我作为参考的已接受答案的链接已关闭,因此我将分享一篇我根据该链接撰写的文章,以帮助其他人解决此问题。
假设我有点n
,也假设这些点有一个顺序,而这些点不一定有功能。我想知道如果这些点不描述函数,如何对它们进行插值?例如,这将是原始点:
我希望这个结果:
请注意,仅使用样条线不起作用,因为这些点不会产生函数,并且使用贝塞尔曲线也不起作用,因为它们不会对点进行插值(仅通过它们附近)。我该怎么做才能得到这个?有算法吗?
只是一个更新。由于我作为参考的已接受答案的链接已关闭,因此我将分享一篇我根据该链接撰写的文章,以帮助其他人解决此问题。
样条有很多种,例如,Catmull-Rom 样条就适用于此。
Maxim Shemanarev 提出了简单而有趣的贝塞尔曲线插值方法
这个答案解决了问题本身的一些概念问题。我不打算将其作为完整的答案。
首先是在给定的情况下总是有一个函数。在数学上,您将曲线描述为从实数(粗略表示“时间”)到您的空间的函数。这通常称为曲线的参数表示。我们将函数写为f(t) =( x(t), y(t) )
,其中x(t)
和y(t)
是单独的参数函数。
问题是您拥有的功能可能不是您想要的功能。这种类型的每个问题,为了有答案的希望,都必须明确说明哪类函数可以作为答案。只是说“功能”没有什么意义。问题是缺少可接受的函数类别的声明是可行的。不过,这里提到了样条线,所以让我们继续。给定一类样条(双三次样条很常见),通常你只能拟合样条上的这么多点,而不是任意数量。所以你想要的是分段样条函数类,即样条序列。
一旦你有了一个可接受的函数类别,你还必须决定如何选择它们。您似乎陈述的条件是您希望样条曲线通过给定的点。这是一种常见的情况,但不是唯一的。其他是最小化曲率、最小化长度、最小化点到曲线的总距离等。拟合条件也是问题陈述的一部分。
总而言之,听起来您想要拟合分段样条曲线以通过一系列点。现在看看其他答案,因为这是他们要回答的问题。