function noise2DOctaves(f, x, y, octaves=2, persistence=1.0) {
var total = 0;
var frequency = 1;
var amplitude = 1;
var maxValue = 0;
for (let i=0;i<octaves;i++) {
total += f(x * frequency, y * frequency) * amplitude;
maxValue += amplitude;
amplitude = amplitude * persistence;
frequency = frequency * 2;
}
return total / maxValue;
}