Displaced, in order
displaced grid, horizontal and vertical separated
Log in to post a comment.
const offset = 90;
const spread = 10; // min=3 max=20 step=1
const row_count = 20; // min=2 max=80 step=1
const col_count = 20; // min=2 max=80 step=1
const steps_amt = 5; // min=1 max=40 step=1
const jitter_amt = 0.8 // min=0.1 max=3 step=0.1
const base_matrix_horizontal = [];
for (let r = 0; r < row_count; r += 1) {
base_matrix_horizontal[r] = [];
for (let c = 0; c < col_count; c += 1) {
base_matrix_horizontal[r].push(jitter([c, r]))
}
}
const base_matrix_vertical = transpose(base_matrix_horizontal);
const matrix_horizontal = interp_matrix(base_matrix_horizontal);
const matrix_vertical = interp_matrix(base_matrix_vertical);
Canvas.setpenopacity(1);
const turtle = new Turtle();
turtle.penup();
function walk(i) {
walk_matrix(transpose(matrix_horizontal));
walk_matrix(transpose(matrix_vertical));
}
function walk_matrix(matrix) {
for (let r = 0; r < matrix.length; r += 1) {
for (let c = 0; c < matrix[r].length; c += 1) {
const coord = matrix[r][c];
const x = (coord[0] * spread) - offset;
const y = (coord[1] * spread) - offset;
turtle.goto(x, y);
turtle.pendown();
}
turtle.penup();
}
}
function transpose(matrix) {
return matrix[0].map(
(_, colIdx) => matrix.map(
(row) => row[colIdx]
)
)
}
function jitter([x, y], amt = jitter_amt) {
return [
x + (Math.random() * amt) - amt/2,
y + (Math.random() * amt) - amt/2
]
}
function interp([x1, y1], [x2, y2], steps = steps_amt) {
const x_step = (x2 - x1) / steps;
const y_step = (y2 - y1) / steps;
const coords = []
for (let i = 1; i < steps; i += 1) {
coords.push([
x1 + x_step * i,
y1 + y_step * i
]);
}
return coords;
}
function interp_matrix(base_matrix) {
const matrix = [];
for (let r = 0; r < base_matrix.length; r += 1) {
matrix[r] = []
for (let c = 0; c + 1 < base_matrix[r].length; c += 1) {
const coord_1 = base_matrix[r][c];
const coord_2 = base_matrix[r][c+1];
matrix[r].push(coord_1);
matrix[r].push(...interp(coord_1, coord_2));
if (c + 2 === base_matrix[r].length) {
matrix[r].push(coord_2);
}
}
}
return matrix;
}