I got a little problem with something I'm currently working on in my freetime: I wanted to create a heightmap in c++ via the DSA. But it's not working as I planned. My code is (please ignore the two character comments):
void DiamondSquareAlgorithm(int x1, int y1, int x2, int y2, float range, unsigned level)
{
//level = size - 1 when called the first time
if (level < 1) return;
float a;
float b;
float c;
float d;
float e;
for (int i = x1; i < x2; i += level)
{
for (int j = y1; j < y2; j += level)
{
//diamond
a = startArr[i + j * (x2 - x1 + 1)]; //lo
b = startArr[(i + level) + j * (x2 - x1 + 1)]; //ro
c = startArr[i + (j + level) * (x2 - x1 + 1)]; //lu
d = startArr[(i + level) + (j + level) * (x2 - x1 + 1)]; //ru
e = startArr[(i + level / 2) + (j + level / 2) * (x2 - x1 + 1)] = (a + b + c + d) / 4;
}
}
for (int i = x1; i < x2; i += level)
{
for (int j = y1; j < y2; j += level)
{
a = startArr[i + j * (x2 - x1 + 1)]; //lo
b = startArr[(i + level) + j * (x2 - x1 + 1)]; //ro
c = startArr[i + (j + level) * (x2 - x1 + 1)]; //lu
d = startArr[(i + level) + (j + level) * (x2 - x1 + 1)]; //ru
e = startArr[(i + level / 2) + (j + level / 2) * (x2 - x1 + 1)] = (a + b + c + d) / 4;
//square
startArr[(i + level / 2) + j * (x2 - x1 + 1)] = (a + b + e) / 3; //o
startArr[(i + level) + (j + level / 2) * (x2 - x1 + 1)] = (b + d + e) / 3; //r
startArr[(i + level / 2) + (j + level) * (x2 - x1 + 1)] = (d + c + e) / 3; //u
startArr[i + (j + level / 2) * (x2 - x1 + 1)] = (a + c + e) / 3; //l
}
}
DiamondSquareAlgorithm(x1, y1, x2, y2, range / 2, (level / 2));
};
The result is always something along the lines of this:
Can someone please help me find the obviously critical mistake I made in my code?