Original Post
im having problems with resizing a 2d array... the result just isnt right... this is what ive got... and yea i got it form somewhere on the forum after several failed attempts.. but this still gave the same results...
#ifndef _Array_H_
#define _Array_H_
#include "math.h"
class CARRAY
{
private:
public:
float m_values;
int m_size;
float Interpolate(float x, float z)
{
// linear interpolation
float col;
int base_x, base_z;
float dx, dz, value;
base_x = (int)floor(x);
base_z = (int)floor(z);
if(base_x < 0 || base_z < 0 || base_x+1 >= m_size || base_z+1 >= m_size)
return(0.0f);
dx = x - base_x;
dz = z - base_z;
col = ((1-dx) * (1-dz) * m_values[base_x+(m_size*(base_z))] +
(1-dx) * (dz) * m_values[base_x+1+(m_size*(base_z))] +
(dx) * (1-dz) * m_values[base_x+(m_size*(base_z+1))] +
(dx) * (dz) * m_values[base_x+1+(m_size*(base_z+1))]);
return col;
}
void Resize(int newsize)
{
float* temp = new float [newsize*newsize];
int x, z;
float x2, z2, dx, dz;
dx = m_size / newsize;
dz = m_size / newsize;
for(z=0, z2=0; z<newsize; z++, z2+=dz)
{
for(x=0, x2=0; x<newsize; x++, x2+=dx)
{
temp[x+(newsize*(z))] = Interpolate(x2, z2);
}
}
delete m_values;
m_size = newsize;
m_values = new float [newsize*newsize];
for (int z = 0; z < newsize; z++)
{
for (int x = 0; x < newsize; x++)
{
m_values[x+(newsize*z)] = temp[x+(newsize*z)];
}
}
}
};