【问题标题】:cubic interpolation in javajava中的三次插值
【发布时间】:2014-07-01 13:43:30
【问题描述】:

对于我正在制作的 Java 程序,我需要插入 4 个点,以在给定的 x 值处计算第 5 个点的 y 值。 说我有以下几点:

p1(0, 0)
p2(1, 2)
p3(2, 4)
p4(3, 3)
// The x-values will always be 0, 1, 2, and 3

现在我想对这些点进行插值,以找出给定 x 的 y 值,例如 x=1.2(这个 x 值将始终介于点 2 和点 3 之间)

谁能帮我制作一个 Java 方法来找到第五个点的 y 坐标?

【问题讨论】:

  • 您打算使用哪种插值方法?什么值是预先确定的?渐变?第二个渐变?
  • 请确认:您要拟合三次多项式吗?
  • 我只需要四个点之间的线条平滑,我猜这叫做三次插值(但我可能错了..)
  • 这是一个相当复杂的领域,这就是我需要更多说明的原因。你希望它是“图形”平滑还是“数学”平滑?
  • 然后使用 Catmull-Rom。你只是可能得到一个完整的答案,但是这个技巧在互联网上已经有很好的描述了。

标签: java math interpolation


【解决方案1】:

一般给定两个点(x0,y0)和(x1,y1),对于x0

这里, y = 2 + (x-1) * 2

【讨论】:

    【解决方案2】:

    有无数条线可以穿过您的所有四个点。

    例如,您可以假设每个点的坡度为零,然后在它们之间绘制简单的 s 形曲线,或者您可以假设坡度是根据相邻点计算得出的(对末端有一些特殊的决定),或者你可以假设点的斜率为 2,等等。

    而且不止于此,您可以有效地绘制一条曲线,将您的点和您可以想象的任何其他点封装起来,同时仍然满足连续的要求(正如您所说的,平滑)。

    我认为您需要从希望拟合点的公式开始,然后选择您使用的技术以最大限度地减少拟合误差。如果你没有做出更多的决定,很可能很难给出更多的方向。

    【讨论】:

    • 技术上你是对的,有无限可能的解决方案,但插值通常只给出一个解决方案。这是因为理论上你可以让每个点的斜率等于 1000,但这看起来不是一条平滑的线。
    • 如果您选择一个正弦波函数来“整合”您的点,它将既平滑又具有正确的频率,可以在任何点上为您提供您想要的任何斜率。你从曲线的特征(也就是公式)开始,然后尝试拟合,或者你想出一些看起来不错的东西,但充其量只是一个明智的公式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多