GRASS Programmer's Manual 6.4.1(2011)
|
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 }