【问题标题】:How to interpolate N points that do not describe a function如何对不描述函数的 N 个点进行插值
【发布时间】:2012-11-09 17:18:35
【问题描述】:

假设我有n 点,还假设这个点有一个顺序,并且这个点没有必要做一个函数。我想知道如果这些点不描述函数,如何对它们进行插值?例如,这将是原始点:

我希望这个结果:

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


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

Interpolate 2D points, usign Bezier curves in WPF

【问题讨论】:

  • 平面中的这条曲线可以通过一对函数x(t)y(t)进行参数化。您是否有已知的遍历点的顺序,或者是否也必须确定?

标签: algorithm interpolation


【解决方案1】:
  1. 样条的种类很多,比如Catmull-Rom splines就适用于此。

  2. Maxim Shemanarev 提出了interpolation by Bezier curves 的简单而有趣的方法

【讨论】:

  • 非常感谢,贝塞尔曲线插值对我来说非常有用。我只做了一个小改动,让它适应开放曲线(不是封闭曲线)。
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多