diff --git a/examples/hypnotic_squares.scad b/examples/hypnotic_squares.scad new file mode 100644 index 00000000..3ded8b0f --- /dev/null +++ b/examples/hypnotic_squares.scad @@ -0,0 +1,82 @@ +include ; +include ; +include ; + +x_grids = 12; +y_grids = 5; +grid_size = 15; +final_size = 3; +line_width = 1; +fn = 12; + +module hypnotic_squares(x_grids, y_grids, grid_size, final_size, line_width) { + function random() = rands(0, 1, 1)[0]; + + dirs = [-1, 0, 1]; + max_steps = ceil((grid_size - final_size) / (line_width * 2)); + start_steps = 2 + round(random() * (max_steps - 2)); + half_lw = line_width / 2; + + module hollow_square(x, y, size) { + translate([x - half_lw, y - half_lw]) + hollow_out(line_width) + square(size + line_width); + } + + module draw(x, y, size, xMovement, yMovement, steps) { + hollow_square(x, y, size); + + if(steps >= 0) { + new_size = (grid_size) * (steps / start_steps) + final_size; + + new_x = x + (size - new_size) / 2; + new_y = y + (size - new_size) / 2; + draw( + new_x - ((x - new_x) / (steps + 3)) * xMovement, + new_y - ((y - new_y) / (steps + 3)) * yMovement, + new_size, + xMovement, + yMovement, + steps - 1) + ; + } + } + + rand_lt = [for(x = 0; x < x_grids; x = x + 1) + [for(y = 0; y < y_grids; y = y + 1) + [random(), random()] + ] + ]; + + module grids() { + translate([0, half_lw]) + for(x = [0:x_grids - 1]) { + for(y = [0:y_grids - 1]) { + draw( + x * grid_size, + y * grid_size, + grid_size, + dirs[floor(rand_lt[x][y][0] * 3)], + dirs[floor(rand_lt[x][y][1] * 3)], + start_steps - 1 + ); + } + } + } + + bend_extrude( + size = [grid_size * x_grids, grid_size * y_grids + line_width], + thickness = line_width, + angle = 360, + frags = $fn + ) grids(); +} + + +hypnotic_squares(x_grids, y_grids, grid_size, final_size, line_width, $fn = fn); + +r = (0.5 * grid_size * x_grids / fn) / sin(180 / fn); +box_extrude( + height = grid_size * y_grids + line_width, + shell_thickness = line_width +) circle(r - line_width / 2, $fn = fn); \ No newline at end of file