06-21-2016, 10:14 PM
reset() {
this.sizeX = 4;
this.sizeZ = 4;
...
}
zoom() {
let lowStepX = (this.sizeX - 1) * 2;
let lowStepZ = (this.sizeZ - 1) * 2;
let cache = new Uint8Array(lowStepX * lowStepZ);
for (let z = 0; z < this.sizeZ - 1; z++)
{
let idx = (z * 2) * lowStepX;
let PrevZ0 = this.values[z * this.sizeX];
let PrevZ1 = this.values[(z + 1) * this.sizeX];
for (let x = 0; x < this.sizeX - 1; x++)
{
let ValX1Z0 = this.values[x + 1 + z * this.sizeX];
let ValX1Z1 = this.values[x + 1 + (z + 1) * this.sizeX];
cache[idx] = PrevZ0;
cache[idx + lowStepX] = this.chooseRandomNumber(PrevZ0, PrevZ1);
cache[idx + 1] = this.chooseRandomNumber(PrevZ0, ValX1Z0);
cache[idx + 1 + lowStepX] = this.chooseRandomNumber(PrevZ0, ValX1Z0, PrevZ1, ValX1Z1);
idx += 2;
PrevZ0 = ValX1Z0;
PrevZ1 = ValX1Z1;
}
}
this.values = cache;
this.sizeX = lowStepX;
this.sizeZ = lowStepZ;
}
visualize(context, canvas) {
context.clearRect(0, 0, canvas.width, canvas.height);
const squareSizeX = canvas.width / (this.sizeX - 1) - g_DistanceBetweenSquares;
const squareSizeY = canvas.height / (this.sizeZ - 1) - g_DistanceBetweenSquares;
for (let x = 0; x < this.sizeX - 1; x++)
{
for (let y = 0; y < this.sizeZ - 1; y++)
{
let renderX = canvas.width / (this.sizeX - 1) * x + g_DistanceBetweenSquares;
let renderY = canvas.height / (this.sizeZ - 1) * y + g_DistanceBetweenSquares;
context.fillStyle = g_Colors[this.values[x + y * this.sizeZ]];
context.fillRect(renderX, renderY, squareSizeX, squareSizeY);
}
}
context.save();
context.globalCompositeOperation = 'difference';
context.fillStyle = 'white';
context.fillText("Size: " + (this.sizeX - 1) + "x" + (this.sizeZ - 1), 5, 10);
context.restore();
}

