Day 113 – Poly-Snaps Truncated Tetrahedron

Day 113 – Poly-Snaps Truncated Tetrahedron

Day 113 – Poly-Snaps Truncated Tetrahedron 640 480 mathgrrl

Over the next six days we’ll be posting polyhedra that we assembled using our new Poly-Snaps on Thingiverse. Our previous polyhedral models were made from Snap Tiles which had either two or three snaps on each side. This new type of modular polyhedra-builder has the same number of snaps on each side and is customizable in Thingiverse Customizer. Today’s print is a Truncated Tetrahedron composed of four triangles and four hexagons:

Thingiverse link: http://www.thingiverse.com/thing:208591

Settings: MakerWare .3mm/low in two batches (to get the two colors).

Technical notes: We used the following settings in the Thingiverse Customizer, which makes a sturdy, compact model that can be difficult to put together but stays together well even when tossed around.

Sides = 3 and 6
Snaps = 3
Side Length = 25
Thickness = 3.5
Border = 3.5
Clearance = .17
Lengthen = .3

Technical notes, OpenSCAD flavor: This is one of my first OpenSCAD designs so it is kind of a hack, but here is the code I wrote to make the Poly-Snap tiles:

// mathgrrl polysnap tiles


////////////////////////////////////////////////////////////////
// PARAMETERS //////////////////////////////////////////////////


/* [Shape] */


// Choose the number of sides for the tile
sides = 5; // [3,4,5,6,7,8,9,10,11,12]


// Choose the number of snaps on each side
snaps = 3; // [2,3,4,5,6,7,8]


/* [Size] */


// Set the length of each side, in mm
side_length = 25; 


// Set the thickness of the tile, in mm
thickness = 3.5;


// Set the border thickness, in mm
border = 3.5; 


/* [Adjust Fit] */


// Add extra space between snaps, in mm
clearance = .17;


// Add extra length to the snaps, in mm
lengthen = .3;


//radius depends on side length
radius = side_length/(2*sin(180/sides)); 


//inside radius depends on the border thickness
inside = radius-border/(cos(180/sides)); 


//width of each snap depends on number of snaps 
snapwidth = radius*sin(180/sides)/snaps;


////////////////////////////////////////////////////////////////
// RENDERS /////////////////////////////////////////////////////


union(){
 //make the polygon base
 poly_maker();  
 
 //make the snaps
 snap_maker(); 
}


////////////////////////////////////////////////////////////////
// MODULES /////////////////////////////////////////////////////


//build the polygon shape of the tile
//shape is made up of n=sides wedges that are rotated around
module poly_maker(){


 //subtract the smaller polygon from the larger polygon
 difference(){


 //extrude to thicken the polygon
 linear_extrude(height=thickness,center=true){ 


 //rotate the wedge n=sides times at angle of 360/n each time
 for(i=[0:sides]){


 //rotation is around the z-axis [0,0,1]
 rotate(i*360/sides,[0,0,1]) 


 //make triangular wedge with angle based on number of sides
 polygon(


 //the three vertices of the triangle
 points = [[0-.1,0-.1], //tweaks fix CGAL errors
  [radius,0-.01],
  [radius*cos(360/sides)-.01,radius*sin(360/sides)+.01]],


 //the order to connect the three vertices above
 paths = [[0,1,2]]
 );
 }
 }
 //extrude to thicken the center polygon that will be the hole
 linear_extrude(height=thickness+2,center=true){ 


 //rotate the wedge n=sides times at angle of 360/n each time 
 for(i=[0:sides]){


 //rotation is around the z-axis [0,0,1]
 rotate(i*360/sides,[0,0,1]) 


 //make triangular wedge with angle based on number of sides
 polygon(


 //the three vertices of the triangle
 points = [[0-.2,0-.2], //tweaks fix CGAL errors
  [inside,0-.01],
  [inside*cos(360/sides)-.01,inside*sin(360/sides)+.01]],


 //the order to connect the three vertices above
 paths = [[0,1,2]]
 );
 }
 }
 }
}


//build the snaps around the tile
//try the commands alone with i=1 and i=2 to see how this works
//remember to read from the bottom to the top to make sense of this
module snap_maker(){


 //rotate the side of snaps n=sides times at angle of 360/n each time
 for(i=[0:sides]){ 


 //rotation is around the z-axis [0,0,1]
 rotate(i*360/sides,[0,0,1])  


 //build snaps for first side at the origin and move into positions
 for(i=[0:snaps-1]){ 


 //read the rest of the commands from bottom to top
 //translate the snap to the first side
 translate([radius,0,-thickness/2]) 


 //rotate the snap to correct angle for first side
 rotate(180/sides) 


 //for i^th snap translate 2*i snapwidths over from origin
 translate([0,2*i*snapwidth,0]) 


 //rounded box for snap made from a box and cylinder
 union(){


 //cube part of snap shape at the origin
 cube([thickness/2+lengthen,snapwidth-clearance,thickness]);


 //post at back of snap to avoid loose teeth
 //shifted a bit right to avoid overhangs when sides=3
 translate([-.5,.5,0])
 cube([thickness/2,snapwidth-clearance-.5,thickness]);
 
 //round part of snap shape at the origin
 //move cylinder to the end of the box
 translate([thickness/2+lengthen,
                   snapwidth-clearance,
                   thickness/2])
 //rotate cylinder to match box orientation
 rotate(90,[0,1,0]) 
 rotate(90,[1,0,0]) 


 //cylinder of the correct size to match box
 cylinder( 
 r=thickness/2,
 h=snapwidth-clearance,
 $fn=16  //number of sides
 );
 }
 }
 }



Update: These Poly-Snap triangle tiles were used by owens on Thingiverse to make a beautiful model of a toroidal polyhedron. So cool!

 

——————

As an Amazon Associate we earn from qualifying purchases, so if you’ve got something you need to pick up anyway, going to Amazon through this link will help us keep Hacktastic running. Thanks! :)


Leave a Reply

Back to top