0

面对用三次样条插值曲面的问题,挖了整个互联网,但是除了正方形[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);
}
4

0 回答 0