00001
00002 #include <grass/gis.h>
00003
00004 DCELL G_interp_linear(double u, DCELL c0, DCELL c1)
00005 {
00006 return u * (c1 - c0) + c0;
00007 }
00008
00009 DCELL G_interp_bilinear(double u, double v,
00010 DCELL c00, DCELL c01, DCELL c10, DCELL c11)
00011 {
00012 DCELL c0 = G_interp_linear(u, c00, c01);
00013 DCELL c1 = G_interp_linear(u, c10, c11);
00014
00015 return G_interp_linear(v, c0, c1);
00016 }
00017
00018 DCELL G_interp_cubic(double u, DCELL c0, DCELL c1, DCELL c2, DCELL c3)
00019 {
00020 return (u * (u * (u * (c3 - 3 * c2 + 3 * c1 - c0) +
00021 (-c3 + 4 * c2 - 5 * c1 + 2 * c0)) + (c2 - c0)) + 2 * c1) / 2;
00022 }
00023
00024 DCELL G_interp_bicubic(double u, double v,
00025 DCELL c00, DCELL c01, DCELL c02, DCELL c03,
00026 DCELL c10, DCELL c11, DCELL c12, DCELL c13,
00027 DCELL c20, DCELL c21, DCELL c22, DCELL c23,
00028 DCELL c30, DCELL c31, DCELL c32, DCELL c33)
00029 {
00030 DCELL c0 = G_interp_cubic(u, c00, c01, c02, c03);
00031 DCELL c1 = G_interp_cubic(u, c10, c11, c12, c13);
00032 DCELL c2 = G_interp_cubic(u, c20, c21, c22, c23);
00033 DCELL c3 = G_interp_cubic(u, c30, c31, c32, c33);
00034
00035 return G_interp_cubic(v, c0, c1, c2, c3);
00036 }