【问题标题】:How to smoothly interpolate between points in two-dimensional space?如何在二维空间中的点之间进行平滑插值?
【发布时间】:2012-07-14 15:35:26
【问题描述】:

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

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

我想远离复杂的数学,例如贝塞尔样条曲线或带有控制点的东西。我觉得必须有一个简单的解决方案,可能适用于到点的距离或类似的东西。

任何想法都值得赞赏。

【问题讨论】:

    标签: math graphics interpolation curve spline


    【解决方案1】:

    听起来你需要一个插值多项式。您可以通过多种方式安装它。试试看这个

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

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

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

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

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

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

    使用样条曲线会阻止您获得使用基本的高次多项式插值可以获得的潜在疯狂振荡。

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

    【讨论】:

      【解决方案2】:

      您无法避免这里的“复杂”数学。而且也没那么复杂。

      三次样条曲线可以很好地解决您的问题。对于类似的任务,我发现 this 论文有简短的解释和我用于计算的矩阵。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        • 2020-08-05
        • 1970-01-01
        • 2016-10-24
        • 2019-12-13
        • 2021-06-10
        相关资源
        最近更新 更多