diff --git a/src/experimental/tile_penrose3.scad b/src/experimental/tile_penrose3.scad index 4a4fd647..3fdef3f1 100644 --- a/src/experimental/tile_penrose3.scad +++ b/src/experimental/tile_penrose3.scad @@ -1,31 +1,28 @@ -use ; -use ; - function _subdivide(triangles) = [ for(tri = triangles) - let( - type = tri[0], - a = tri[1], - b = tri[2], - c = tri[3] - ) - each (type == "OBTUSE" ? _sub_obtuse(a, b, c) : _sub_acute(a, b, c)) + each (tri[0] == "OBTUSE" ? _sub_obtuse(tri[1]) : _sub_acute(tri[1])) ]; -function _sub_acute(a, b, c) = +function _sub_acute(tri_shape) = let( + a = tri_shape[0], + b = tri_shape[1], + c = tri_shape[2], PHI = 1.618033988749895, p = a + (b - a) / PHI ) - [["ACUTE", c, p, b], ["OBTUSE", p, c, a]]; + [["ACUTE", [c, p, b]], ["OBTUSE", [p, c, a]]]; -function _sub_obtuse(a, b, c) = +function _sub_obtuse(tri_shape) = let( + a = tri_shape[0], + b = tri_shape[1], + c = tri_shape[2], PHI = 1.618033988749895, r = b + (c - b) / PHI ) - [["OBTUSE", r, c, a], each _sub_acute(b, a, r)]; + [["OBTUSE", [r, c, a]], each _sub_acute([b, a, r])]; function _penrose3(triangles, n, i = 0) = i == n ? triangles : _penrose3(_subdivide(triangles), n, i+ 1); @@ -34,36 +31,34 @@ function tri2tile(type, tri) = let( tri1 = tri[1], tri2 = tri[2], - c = (tri1 + tri2) / 2, - v = c - tri[0], - m = c + v + m = 2 * (tri1 + tri2) / 2 - tri[0] ) - [[type, each tri], [type, m, tri1, tri2]]; + [[type, tri], [type, [m, tri1, tri2]]]; function _zRotation(a) = let(c = cos(a), s = sin(a)) - [ - [c, -s], - [s, c] - ]; + [[c, -s], [s, c]]; function tile_penrose3(n, triangles) = let( fn = 10, - a = 720 / fn, - tris = _penrose3( - is_undef(triangles) ? - let(shape_tri0 = [[1, 0], [1, 0] + ptf_rotate([-1, 0], -180 + a), [0, 0]]) - [ - for(i = [0:fn / 2 - 1]) - let(m = _zRotation(i * a), t = [for(p = shape_tri0) m * p]) - each tri2tile("OBTUSE", t) - ] : - [for(tri = triangles) each tri2tile(tri[0], [tri[1][1], tri[1][2], tri[1][0]])], - n - ) + a = 720 / fn ) - [for(t = tris) [t[0], [t[3], t[1], t[2]]]]; + _penrose3( + is_undef(triangles) ? + // star + let(shape_tri0 = [[1, 0], [1, 0] + _zRotation(-180 + a) * [-1, 0], [0, 0]]) + [ + for(i = [0:fn / 2 - 1]) + let(m = _zRotation(i * a), t = [for(p = shape_tri0) m * p]) + each tri2tile("OBTUSE", t) + ] : + [for(tri = triangles) each tri2tile(tri[0], tri[1])], + n + ); + +use ; +use ; module draw(tris, radius) { for(t = tris) { @@ -71,16 +66,15 @@ module draw(tris, radius) { linear_extrude(.5) polygon(t[1] * radius); linear_extrude(1) - hull_polyline2d(t[1] * radius, .1); + polyline_join(t[1] * radius) + circle(.1); } } radius = 10; $fn = 12; -draw(tile_penrose3(5, [ - ["OBTUSE", [ptf_rotate([2, 0], 108), [0, 0], [2, 0]]] -]), radius); +draw(tile_penrose3(5, [["OBTUSE", [[0, 0], [1, 0], ptf_rotate([1, 0], 108)]]]), radius); translate([40, 0]) draw(tile_penrose3(0), radius);