如何在二维空间中点之间进行平滑插值



假设我有许多点,每个点由二维笛卡尔坐标系中的X和Y坐标定义。每个点的X坐标都大于其前身的X坐标,因此不可能有任何循环。

我怎样才能在这些点之间画一条平滑的线?结果应该看起来像正弦波,但振幅和波长不同。如果它被简化或近似,只要它允许我在不使用任何直线或样条曲线库函数的情况下计算插值点的Y坐标,那就完全可以了。语言无关紧要,我感兴趣的是算法,而不是实现。为了全面披露,我计划用JavaScript实现它。

我想远离复杂的数学,比如Bézier样条曲线或有控制点的东西。我觉得必须有一个简单的解决方案,也许可以处理到点的距离或类似的问题。

任何想法都值得赞赏。

听起来你需要一个插值多项式。有很多方法可以适合它。试着阅读这个

http://en.wikipedia.org/wiki/Polynomial_interpolation#Constructing_the_interpolation_polynomial

如果你有大量的点,那么你可以考虑使用近似值,否则你可能会遭受点之间数据的过度拟合和较差的表示。在这种情况下,可以使用最小二乘多项式近似。这取决于你需要的准确度。

http://en.wikipedia.org/wiki/Leastrongquares#Linear_leastrongquares

特别是,如果你的数据是正弦的,你实际上可以使用三角基函数(不同整数频率的正弦或余弦函数)来近似数据,而不是x的正则幂。

或者,您可以使用样条曲线以不涉及控制点的非参数方式进行插值

http://en.wikipedia.org/wiki/Spline_interpolation

使用样条曲线将防止你获得潜在的剧烈振荡,你可以使用基本的高阶多项式插值。

与所有近似问题一样,在没有看到数据(及其数量)的情况下,很难给出明确的答案。最终,如果你有大量数据,基本多项式插值不是你的朋友,因为如果你有1000个点要插值,你需要999次多项式。

这里无法避免"复杂"的数学运算。这并没有那么复杂。

三次样条曲线是解决您问题的好方法。对于类似的任务,我找到了这篇论文,并给出了简短的解释和一个矩阵,用于我的计算。

您可以尝试使用近似方法。"最小二乘法"及其修改是最简单、易于实现的方法之一。

最新更新