2012-07-15 177 views
1

假设我有许多点,每个点都由二维笛卡尔坐标系中的X和Y坐标定义。每个点的X坐标都大于前一个点的X坐标,所以不能有任何循环。如何在二维空间中的点之间平滑插值?

如何通过这些要点画出一条平滑线?结果应该看起来像正弦波,但幅度和波长都不相同。只要它允许我计算插值点的Y坐标而不使用任何线性或样条函数库函数,它就是简化或近似的。语言并不重要,我对算法感兴趣,而不是实现。为了充分披露,我打算用JavaScript来实现它。

我想远离复杂的数学,比如Bézier样条曲线或者带有控制点的东西。我觉得必须有一个简单的解决方案,可能与距离点或类似的东西有关。

任何想法是赞赏。

回答

0

听起来像你需要一个插值多项式。有很多方法可以适应它。尝试阅读本

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

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

http://en.wikipedia.org/wiki/Least_squares#Linear_least_squares

特别是,如果你的数据是正弦曲线,您可以使用trignometric基函数(不同的整数频率的正弦或余弦函数),而不是x的常规权力实际上近似数据。

或者,你可以插在不涉及控制点

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

使用花键将阻止你获得潜在的野生振荡,你可以得到使用基本高阶多项式内插的非参数方法使用样条。

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

0

你不能避免这里的“复杂”数学。这并不复杂。

立方样条是解决您的问题的好方法。对于类似的任务,我发现this论文有简短的解释和我用于计算的矩阵。

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