From 5f4b502fdf50d945a88a421458edfa908db01260 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Tue, 28 Apr 2020 20:36:41 +0800 Subject: [PATCH] support wall_height --- examples/maze/sphere_maze.scad | 55 +++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/examples/maze/sphere_maze.scad b/examples/maze/sphere_maze.scad index 972a5741..9d9a4862 100644 --- a/examples/maze/sphere_maze.scad +++ b/examples/maze/sphere_maze.scad @@ -1,4 +1,3 @@ -use ; use ; use ; use ; @@ -7,11 +6,50 @@ use ; r = 10; rows = 24; columns = 18; -block_width = 1; +block_width = .5; wall_thickness = .5; -pole_offset = block_width * 1.5; +wall_height = 1.5; +pole_offset = block_width * 2.5; module sphere_maze() { + function _angles(p) = + let( + dx = p[0], + dy = p[1], + dz = p[2], + ya = atan2(dz, sqrt(dx * dx + dy * dy)), + za = atan2(dy, dx) + ) [0, -ya, za]; + + module _polyline(points) { + leng = len(points); + + module _line(index) { + point1 = points[index - 1]; + point2 = points[index]; + + hull() { + rotate(_angles(point1)) + translate([r, 0, 0]) + cube([wall_height, wall_thickness, wall_thickness], center = true); + + rotate(_angles(point2)) + translate([r, 0, 0]) + cube([wall_height, wall_thickness, wall_thickness], center = true); + } + } + + module _polyline_inner(index) { + if(index < leng) { + _line(index); + _polyline_inner(index + 1); + } + } + + _polyline_inner(1); + } + + size = [rows * block_width, columns * block_width + pole_offset * 2]; blocks = mz_blocks( [1, 1], @@ -28,10 +66,19 @@ module sphere_maze() { for(p = wall_pts) ptf_sphere(size, mr * [p[0], p[1], 0, 0] + p_offset, r) ]; - hull_polyline3d(rxpts, wall_thickness, $fn = 6); + _polyline(rxpts); } } +function _angles(p) = + let( + dx = p[0], + dy = p[1], + dz = p[2], + ya = atan2(dz, sqrt(dx * dx + dy * dy)), + za = atan2(dy, dx) + ) [0, -ya, za]; + sphere_maze(); color("black") rotate([0, 90, 0])