math - 等距点的三次插值

标签 math interpolation catmull-rom-curve

我正在尝试创建点列表的插值。

我有一些坐标点(ti,xi),其中ti是时间戳,而xi是关联的值。我想创建一个通过这些点的函数,并允许我找到与位于间隔中的通用t对应的x值。

我想用三阶插值对它们进行插值。我已经看到过类似catmull-rom插值的方法,但是只有在点xi等距时它才起作用。

例如,在这里http://www.mvps.org/directx/articles/catmull/,您可以发现时间戳记点是等距的,就像这里http://www.cs.cmu.edu/~462/projects/assn2/assn2/catmullRom.pdf一样。

有一些方法可以对非规则点应用三次插值?

最佳答案

只要它们都是不同的,则参数的不等距就不成问题。如您所知,如果您有四个不同的时间t[i],那么将存在一个对应的值x[i]的唯一多项式插值,其度数最多为3(立方或更低阶)。

有两种主要方法可计算插值Newton's divided-differencesLagrange's method of interpolation

请记住,仅找到多项式不是重点,而是在间隔中的其他时间对其进行评估,需要考虑一些编程折衷。

如果t[i]的时间是固定的,但是x[i]的值反复更改,则使用Lagrange的方法可能会很不方便。它基本上构造了四个三次多项式,它们在四个点中的三个处生根,并在剩余点处给出归一化值1。一旦有了这四个多项式,就可以对值x[i]进行插值,只是采用它们的相应线性组合即可。拉格朗日的方法患有Runge's phenomenon at the edges of the interval

但是,如果t[i]的时间不断变化,或者您正在针对相同t[i], x[i]数据的多个中间点评估插值多项式,则Newton's divided differences可能会更好。如果精度很重要,则可以更改t[i]出现在除差表中的顺序,以便将评估集中在最接近需要该值的中间时间的时间处。

在Web上找到牛顿的除数差分法的示例代码并不难。在C++,Python或Java中。

关于math - 等距点的三次插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6250211/

相关文章:

javascript - 如何创建集中在 JS 特定区域的随机点?

c++ - boost::operators 混合算术

python - 在 python 中插入/推断丢失的日期?

c++ - 三次样条 : Start/End Segment interpolation

c# - 如何找到贝塞尔曲线的控制点?

java - CatmullRomSplines 和其他平滑路径

.net - .NET 矩阵库

java - 在 1 轴上旋转四元数?

python - 数据存储以简化 Python 中的数据插值

javascript - 无法插入将 $scope 变量传递到 Angular 过滤器时出现的错误