Original Post
Quote:I know the values of A, B, C & D and I want to interpolate between those values to fill in the rest of the ?'s Below is the source code as I currently have it, but I am doing something wrong somewhere and I can't figure it out. In the code below the NW quadrant == 0 NE quadrant == 1 SW quadrant == 2 SE quadrant == 3
+---0,0---+---1,0---+ |? ? ? ? ?|? ? ? ? ?|... |? ? ? ? ?|? ? ? ? ?|... |? ? A ? ?|? ? B ? ?|... |? ? ? ? ?|? ? ? ? ?|... |? ? ? ? ?|? ? ? ? ?|... +---0,1---+---1,1---+ |? ? ? ? ?|? ? ? ? ?|... |? ? ? ? ?|? ? ? ? ?|... |? ? C ? ?|? ? D ? ?|... |? ? ? ? ?|? ? ? ? ?|... |? ? ? ? ?|? ? ? ? ?|... +---------+---------+ | ... | ... |...
for(int pix = 0; pix < RMAP_X; pix++)
{
for(int piy = 0; piy < RMAP_Y; piy++)
{
quadrant = -1;
if(pix < (halfRMAP_X) && piy <(halfRMAP_Y))
{
quadrant = 0;
}
else if(pix >= (halfRMAP_X) && piy < (halfRMAP_Y))
{
quadrant = 1;
}
else if(pix < (halfRMAP_X) && piy >= (halfRMAP_Y))
{
quadrant = 2;
}
else if(pix >= (halfRMAP_X) && piy >= (halfRMAP_Y))
{
quadrant = 3;
}
if(quadrant == 0)
{
//nw quadrant -
//pix < halfRMAP_X
//piy < halfRMAP_Y
float nwDist = 0;
float nDist = 0;
float wDist = 0;
float centDist = 0;
nDist = 1 / linearDist(pix,piy,pix + (halfRMAP_X - pix),piy - (halfRMAP_Y + piy));
wDist = 1 / linearDist(pix,piy,pix - (halfRMAP_X + pix),piy + (halfRMAP_Y - piy));
nwDist = 1 / linearDist(pix,piy, pix - (halfRMAP_X + pix), piy - (halfRMAP_Y - piy));
centDist = 1 / linearDist(pix,piy, pix + (halfRMAP_X - pix), piy + (halfRMAP_Y - piy));
float sum = nDist + wDist + nwDist + centDist;
nDist = nDist / sum;
wDist = wDist / sum;
nwDist = nwDist / sum;
centDist = centDist / sum;
world.wMap[wX][wY].area.aMap[aX][aY].region.rMap[pix][piy].elevation = nw*nwDist + n*nDist + w*wDist + world.wMap[wX][wY].area.aMap[aX][aY].region.baseHt*centDist;
}
else if(quadrant == 1)
{
//ne quadrant
//pix >= halfRMAP_X
//piy < halfRMAP_Y
float neDist = 0;
float nDist = 0;
float eDist = 0;
float centDist = 0;
nDist = 1 / linearDist(pix,piy, pix - (pix - halfRMAP_X), piy - (halfRMAP_Y + piy));
eDist = 1 / linearDist(pix,piy, pix + (halfRMAP_X + (RMAP_X - pix)), piy + (halfRMAP_Y - piy));
neDist = 1 / linearDist(pix,piy, pix + (halfRMAP_X + (RMAP_X - pix)), piy - (halfRMAP_Y + piy));
centDist = 1 / linearDist(pix,piy, pix - (pix - halfRMAP_X), piy + (halfRMAP_Y - piy));
float sum = nDist + eDist + neDist + centDist;
nDist = nDist / sum;
eDist = eDist / sum;
neDist = neDist / sum;
centDist = centDist / sum;
world.wMap[wX][wY].area.aMap[aX][aY].region.rMap[pix][piy].elevation = ne*neDist + n*nDist + e*eDist + world.wMap[wX][wY].area.aMap[aX][aY].region.baseHt*centDist;
}
else if(quadrant == 2)
{
//sw quadrant
//pix < halfRMAP_X
//piy >= halfRMAP_Y
float swDist = 0;
float sDist = 0;
float wDist = 0;
float centDist = 0;
wDist = 1 / linearDist(pix,piy,pix - (halfRMAP_X + pix), piy - (piy - halfRMAP_Y));
sDist = 1 / linearDist(pix,piy, pix + (halfRMAP_X - pix), piy + (halfRMAP_Y + (RMAP_Y - piy)));
swDist = 1 / linearDist(pix,piy, pix - (halfRMAP_X + pix), piy + (halfRMAP_Y + (RMAP_Y - piy)));
centDist = 1 / linearDist(pix,piy, pix + (halfRMAP_X - pix), piy - (piy - halfRMAP_Y));
float sum = sDist + wDist + swDist + centDist;
sDist = sDist / sum;
wDist = wDist / sum;
swDist = swDist / sum;
centDist = centDist / sum;
world.wMap[wX][wY].area.aMap[aX][aY].region.rMap[pix][piy].elevation = sw*swDist + s*sDist + w*wDist + world.wMap[wX][wY].area.aMap[aX][aY].region.baseHt*centDist;
}
else if(quadrant == 3)
{
//se quadrant
//pix >= halfRMAP_X
//piy >= halfRMAP_Y
float seDist = 0;
float sDist = 0;
float eDist = 0;
float centDist = 0;
eDist = 1 / linearDist(pix,piy, pix + (halfRMAP_X + (RMAP_X - pix)), piy - (piy - halfRMAP_Y));
sDist = 1 / linearDist(pix,piy, pix - (pix - halfRMAP_X), piy + (halfRMAP_Y + (RMAP_Y - piy)));
seDist = 1 / linearDist(pix,piy, pix + (halfRMAP_X + (RMAP_X - pix)), piy + (halfRMAP_Y + (RMAP_Y - piy)));
centDist = 1 / linearDist(pix,piy, pix - (pix - halfRMAP_X), piy - (piy - halfRMAP_Y));
float sum = sDist + eDist + seDist + centDist;
sDist = sDist / sum;
eDist = eDist / sum;
seDist = seDist / sum;
centDist = centDist / sum;
world.wMap[wX][wY].area.aMap[aX][aY].region.rMap[pix][piy].elevation = se*seDist + s*sDist + e*eDist + world.wMap[wX][wY].area.aMap[aX][aY].region.baseHt*centDist;
}
}
}
as you can see, things don't line up correctly and some other stuff isn't working out correctly. It looks like it is something with the se quadrant, because it seems from the shore in the 2nd picture that the sw & ne quadrants will line up, but I'm not sure. [Edited by - polpoint on September 28, 2009 7:08:48 PM]


