面对用三次样条插值曲面的问题,挖了整个互联网,但是除了正方形[0,1] x [[0,1]中的平庸插值没有找到任何东西,但我需要插值在任意区域内(无论是 16 个点还是 4 个点,并指示所有导数等),我举个例子:我们取满足椭圆抛物面方程的点:x = {100..102},y = {100..102}
x = 100, y = 100, f (x, y) = 1805.56
x = 100, y = 101, f (x, y) = 1816.72
x = 100, y = 102, f (x, y) = 1828
x = 101, y = 100, f (x, y) = 1830.68
x = 101, y = 101, f (x, y) = 1841.85
x = 101, y = 102, f (x, y) = 1853.12
x = 102, y = 100, f (x, y) = 1856.06
x = 102, y = 101, f (x, y) = 1867.22
x = 102, y = 102, f (x, y) = 1878.5
如何计算点 {101.5, 101.5} 的值?我阅读了维基百科上的文章,但没有说明它如何在任意点上工作,在正方形 [0,1] x [0,1] 之外的一个很好的实现,适用于单个正方形并在此处使用一致的插值
double cubicInterpolate (double p[4], double x) {
return p[1] + 0.5 * x*(p[2] - p[0] + x*(2.0*p[0] - 5.0*p[1] + 4.0*p[2] -
p[3] + x*(3.0*(p[1] - p[2]) + p[3] - p[0])));
}
double bicubicInterpolate (double p[4][4], double x, double y) {
double arr[4];
arr[0] = cubicInterpolate(p[0], y);
arr[1] = cubicInterpolate(p[1], y);
arr[2] = cubicInterpolate(p[2], y);
arr[3] = cubicInterpolate(p[3], y);
return cubicInterpolate(arr, x);
}