C ++数组插值,结果奇怪

时间:2012-04-15 14:10:07

标签: c++ interpolation

我有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 数据在正确的位置,但似乎插值是低效的.. 这应该是平滑的:它充满了三角形:(

一些想法?...

解决了:

好的,找不到

我的“获得最近邻居”算法是错误的。

0 个答案:

没有答案