3

假设我有点n,也假设这些点有一个顺序,而这些点不一定有功能。我想知道如果这些点不描述函数,如何对它们进行插值?例如,这将是原始点: 插值点

我希望这个结果:

插值点

请注意,仅使用样条线不起作用,因为这些点不会产生函数,并且使用贝塞尔曲线也不起作用,因为它们不会对点进行插值(仅通过它们附近)。我该怎么做才能得到这个?有算法吗?


只是一个更新。由于我作为参考的已接受答案的链接已关闭,因此我将分享一篇我根据该链接撰写的文章,以帮助其他人解决此问题。

插值 2D 点,在 WPF 中使用 Bezier 曲线

4

2 回答 2

5
  1. 样条有很多种,例如,Catmull-Rom 样条就适用于此。

  2. Maxim Shemanarev 提出了简单而有趣的贝塞尔曲线插值方法

于 2012-11-09T18:21:19.913 回答
1

这个答案解决了问题本身的一些概念问题。我不打算将其作为完整的答案。

首先是在给定的情况下总是有一个函数。在数学上,您将曲线描述为从实数(粗略表示“时间”)到您的空间的函数。这通常称为曲线的参数表示。我们将函数写为f(t) =( x(t), y(t) ),其中x(t)y(t)是单独的参数函数。

问题是您拥有的功能可能不是您想要的功能。这种类型的每个问题,为了有答案的希望,都必须明确说明哪类函数可以作为答案。只是说“功能”没有什么意义。问题是缺少可接受的函数类别的声明是可行的。不过,这里提到了样条线,所以让我们继续。给定一类样条(双三次样条很常见),通常你只能拟合样条上的这么多点,而不是任意数量。所以你想要的是分段样条函数类,即样条序列。

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

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

于 2012-11-09T19:35:45.027 回答