Lighting geometric design created with #OpenSCAD by @samakanbour.
I really love these beautifully designed candle containers that diffuse light through their holes. Useful, useable and desirable, these objects are mass-produced around the world. I can easily imagine consumers personalizing and purchasing them to decorate their homes and offices. Inspired by the Freshfiber lighting collection, I tried to capture a triangular geometric design, and generate different versions by playing with its parameters. I am pleased with the simplicity and depth of the designs, but I am not entirely satisfied with their limited variations. I would have loved having other than triangular shapes, such as circular or cubic.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | // inspired by NateTG maxlevel = 3; size = 30; thickness = 10; difference() { color("MediumOrchid") sierpinski(side=size,maxlevel=maxlevel); middle(size - thickness); cylinder(r = 3/maxlevel, h = 50, center=true); rotate([90]) cylinder(r = 3/maxlevel, h = 50, center=true); rotate([0, 90]) cylinder(r = 3/maxlevel, h = 50, center=true); } module triangle(side, maxlevel=3) { difference() { polyhedron(points=[[side,0,0],[0,side,0],[0,0,side],[-side,0,0],[0,-side,0],[0,0,-side]], triangles=[[0,2,1],[0,4,2],[0,5,4],[0,1,5],[3,1,2],[3,2,4],[3,4,5],[3,5,1]]); rotate([45]) cylinder(r = 2/maxlevel, h = 50, center=true); rotate([-45]) cylinder(r = 2/maxlevel, h = 50, center=true); rotate([0, -45]) cylinder(r = 2/maxlevel, h = 50, center=true); rotate([0, 45]) cylinder(r = 2/maxlevel, h = 50, center=true); } } module middle(side) { polyhedron(points=[[side,0,0],[0,side,0],[0,0,side],[-side,0,0],[0,-side,0],[0,0,-side]], triangles=[[0,2,1],[0,4,2],[0,5,4],[0,1,5],[3,1,2],[3,2,4],[3,4,5],[3,5,1]]); } module sierpinski(side=1,maxlevel=3,level=1) { for(i =[[side*sqrt(2)/4,0,0],[0,side*sqrt(2)/4,0],[0,0,side*sqrt(2)/4],[-side*sqrt(2)/4,0,0],[0,-side*sqrt(2)/4,0], [0,0,-side*sqrt(2)/4]]) { if(level<maxlevel) { translate(i) sierpinski(side=side/2,maxlevel=maxlevel,level=level+1); } else { translate(i) triangle(side=side*sqrt(2)/4, maxlevel=maxlevel); } } } |