contours = function contour(isLeft) {
const q = 4;
const x0 = -1, x1 = 510 + q - 2;
const y0 = -1, y1 = visHeight + q - 2;
const n = Math.ceil((x1 - x0) / q);
const m = Math.ceil((y1 - y0) / q);
const grid_right = new Array(n * m);
const grid_left = new Array(n * m);
for (let j = 0; j < m; ++j) {
for (let i = 0; i < n; ++i) {
if (i - j > 0) {
grid_left[j * n + i] = rank_turbulence(i, j, alpha);
} else {
grid_right[j * n + i] = rank_turbulence(i, j, alpha);
}
}
}
grid_left.x = grid_right.x = -q;
grid_left.y = grid_right.y = -q;
grid_left.k = grid_right.k = q;
grid_left.n = grid_right.n = n;
grid_left.m = grid_right.m = m;
const grid = {'left': grid_left.reverse(), 'right':grid_right.reverse()};
let chosen_grid = grid[isLeft ? 'left' : 'right']
const transform = ({type, value, coordinates, isLeft}) => {
return {type, value, coordinates: coordinates.map(rings => {
return rings.map(points => {
return points.map(([x, y]) => ([
chosen_grid.x + chosen_grid.k * x + 3,
chosen_grid.y + chosen_grid.k * y + 3
]));
});
})};
}
let contour = d3.contours().size([chosen_grid.n, chosen_grid.m]).thresholds(10)
return contour(chosen_grid).map(d => transform(d, isLeft ? true : false));
}