我有3个阵列。这是一些天气数据。
xlat[Y][X]; // latitude
xlon[Y][X]; // longitude
data[Y][X]; // data at lat, lon
(投影:WRF Lambert Conformal Conic)。
我需要在256x256像素阵列上绘制其中的一部分。 (投影:球形墨卡托又名谷歌地图......)。
我可以计算每个像素的纬度/经度。
我喜欢
double interpolate (pixel_lat, pixel_lon) {
// lookup (xlat, xlon) for 16 closest points to (pixel_lat, pixel_lon)
// only a part of the code. test for different y,x values
poids = 1/sqrt( pow(pixel_lat-xlat[y][x], 2) + pow(pixel_lon-xlon[y][x], 2) );
if (poids > tmp.poids[0]) {
for (int k=1; k<16; k++)
tmp.poids[k] = tmp.poids[k-1];
tmp.poids[0] = poids;
for (int k=1; k<16; k++)
tmp.val[k] = tmp.val[k-1];
tmp.val[0] = data[x][y];
} else if (poids > tmp.poids[1]) // and so...
// bicubic interpolation of 16 closests data points...
ipNum = 0;
ipDeNum = 0;
for (int i=0; i<16; i++)
ipNum += tmp.poids[i] * tmp.val[i];
for (int i=0; i<16; i++)
ipDeNum += tmp.poids[i];
val = ipNum / ipDeNum;
return val;
}
这是我得到的最后一个结果:http://new.rasp-france.org/test.html 数据在正确的位置,但似乎插值是低效的.. 这应该是平滑的:它充满了三角形:(
一些想法?...
好的,找不到
我的“获得最近邻居”算法是错误的。