Download this thing or ask me how I made it at thingiverse.com
back
floret pentagonal torus

vertices = [
[0, -1],
[1.732050808, -2],
[1.732050808, -3],
[.8660254042, -3.5],
[0, -3],
[-.8660254042, -3.5],
[-1.732050808, -3],
[-1.732050808, -2],
[-2.598076212, -1.5],
[-2.598076212, -.5],
[-1.732050808, 0],
[-1.732050808, 1],
[-.8660254042, 1.5],
[0, 1],
[.8660254042, 1.5],
[1.732050808, 1],
[1.732050808,, 0],
[2.598076212, -.5],
[2.598076212, -1.5],
[3.464101616, -2],
[4.33012702, -1.5],
[4.33012702, .5],
[2.598076212, 1.5],
[2.598076212, 2.5],
[3.464101616, 3],
[4.33012702, 2.5],
[5.196152424, 3],
[6.062177828, 2.5],
[6.062177828, 1.5],
[6.928203232, 1],
[6.928203232, 0],
[6.062177828, -.5],
[6.062177828, -1.5],
[5.196152424, -2]
];


//rotate an angle of phi, shift 1 in the y direction and scale
// to a size of (1, 1)
rotated_scaled_vertices = [
for(n=[0:33])let(
h = .1259881576,
k = .2182178902,
A = vertices[n],
phi = 10.89339467,
x = h*(cos(phi)*A[0] - sin(phi)*(A[1]+1)),
y = k*(sin(phi)*A[0] + cos(phi)*(A[1]+1))
)
[x, y]
];


paths = [
15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5,
4, 3, 2, 1, 18, 19, 20, 33, 32, 31, 30,
29, 28, 27, 26, 25, 24, 23, 22, 15, 16,
17, 18,

17, 28, 22, 31, 25, 20,
7, 16, 10, 1, 13, 4
];

list_1 = [
for(n=[0:32])
     for(t=[0:10])
         let(
         A = rotated_scaled_vertices[paths[n]],
         B = rotated_scaled_vertices[paths[n+1]],
         x = A[0] + .1*t*(B[0]-A[0]),
         y = A[1] + .1*t*(B[1]-A[1])
         )
[x, y]
];
    
    
    

list_2 = [
for(n=[34:34])
     for(t=[0:40])
         let(
         A = rotated_scaled_vertices[paths[n]],
         B = rotated_scaled_vertices[paths[n+1]],
         x = A[0] + .025*t*(B[0]-A[0]),
         y = A[1] + .025*t*(B[1]-A[1])
         )
[x, y]
];

list_3 = [
for(n=[36:36])
     for(t=[0:40])
         let(
         A = rotated_scaled_vertices[paths[n]],
         B = rotated_scaled_vertices[paths[n+1]],
         x = A[0] + .025*t*(B[0]-A[0]),
         y = A[1] + .025*t*(B[1]-A[1])
         )
[x, y]
];
    
list_4 = [
for(n=[38:38])
     for(t=[0:40])
         let(
         A = rotated_scaled_vertices[paths[n]],
         B = rotated_scaled_vertices[paths[n+1]],
         x = A[0] + .025*t*(B[0]-A[0]),
         y = A[1] + .025*t*(B[1]-A[1])
         )
[x, y]
];
    
list_5 = [
for(n=[40:40])
     for(t=[0:40])
         let(
         A = rotated_scaled_vertices[paths[n]],
         B = rotated_scaled_vertices[paths[n+1]],
         x = A[0] + .025*t*(B[0]-A[0]),
         y = A[1] + .025*t*(B[1]-A[1])
         )
[x, y]
];
    
list_6 = [
for(n=[42:42])
     for(t=[0:40])
         let(
         A = rotated_scaled_vertices[paths[n]],
         B = rotated_scaled_vertices[paths[n+1]],
         x = A[0] + .025*t*(B[0]-A[0]),
         y = A[1] + .025*t*(B[1]-A[1])
         )
[x, y]
];
    
list_7 = [
for(n=[44:44])
     for(t=[0:40])
         let(
         A = rotated_scaled_vertices[paths[n]],
         B = rotated_scaled_vertices[paths[n+1]],
         x = A[0] + .025*t*(B[0]-A[0]),
         y = A[1] + .025*t*(B[1]-A[1])
         )
[x, y]
];

for(l=[0:4])
{
for(m=[0:2])
{
for(n=[0:361])
{
     A = list_1[n];
     B = list_1[n+1];
     hull()
     {
         translate([(9 + 6*cos(A[1]*120+120*m))*cos(A[0]*72+72*l),
                     (9 + 6*cos(A[1]*120+120*m))*sin(A[0]*72+72*l),
                     6*sin(A[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
         translate([(9 + 6*cos(B[1]*120+120*m))*cos(B[0]*72+72*l),
                     (9 + 6*cos(B[1]*120+120*m))*sin(B[0]*72+72*l),
                     6*sin(B[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
     }
}

for(n=[0:39])
{
     A = list_2[n];
     B = list_2[n+1];
     hull()
     {
         translate([(9 + 6*cos(A[1]*120+120*m))*cos(A[0]*72+72*l),
                     (9 + 6*cos(A[1]*120+120*m))*sin(A[0]*72+72*l),
                     6*sin(A[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
         translate([(9 + 6*cos(B[1]*120+120*m))*cos(B[0]*72+72*l),
                     (9 + 6*cos(B[1]*120+120*m))*sin(B[0]*72+72*l),
                     6*sin(B[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
     }
}
for(n=[0:39])
{
     A = list_3[n];
     B = list_3[n+1];
     hull()
     {
         translate([(9 + 6*cos(A[1]*120+120*m))*cos(A[0]*72+72*l),
                     (9 + 6*cos(A[1]*120+120*m))*sin(A[0]*72+72*l),
                     6*sin(A[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
         translate([(9 + 6*cos(B[1]*120+120*m))*cos(B[0]*72+72*l),
                     (9 + 6*cos(B[1]*120+120*m))*sin(B[0]*72+72*l),
                     6*sin(B[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
     }
}
for(n=[0:39])
{
     A = list_4[n];
     B = list_4[n+1];
     hull()
     {
         translate([(9 + 6*cos(A[1]*120+120*m))*cos(A[0]*72+72*l),
                     (9 + 6*cos(A[1]*120+120*m))*sin(A[0]*72+72*l),
                     6*sin(A[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
         translate([(9 + 6*cos(B[1]*120+120*m))*cos(B[0]*72+72*l),
                     (9 + 6*cos(B[1]*120+120*m))*sin(B[0]*72+72*l),
                     6*sin(B[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
     }
}
for(n=[0:39])
{
     A = list_5[n];
     B = list_5[n+1];
     hull()
     {
         translate([(9 + 6*cos(A[1]*120+120*m))*cos(A[0]*72+72*l),
                     (9 + 6*cos(A[1]*120+120*m))*sin(A[0]*72+72*l),
                     6*sin(A[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
         translate([(9 + 6*cos(B[1]*120+120*m))*cos(B[0]*72+72*l),
                     (9 + 6*cos(B[1]*120+120*m))*sin(B[0]*72+72*l),
                     6*sin(B[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
     }
}
for(n=[0:39])
{
     A = list_6[n];
     B = list_6[n+1];
     hull()
     {
         translate([(9 + 6*cos(A[1]*120+120*m))*cos(A[0]*72+72*l),
                     (9 + 6*cos(A[1]*120+120*m))*sin(A[0]*72+72*l),
                     6*sin(A[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
         translate([(9 + 6*cos(B[1]*120+120*m))*cos(B[0]*72+72*l),
                     (9 + 6*cos(B[1]*120+120*m))*sin(B[0]*72+72*l),
                     6*sin(B[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
     }
}
for(n=[0:39])
{
     A = list_7[n];
     B = list_7[n+1];
     hull()
     {
         translate([(9 + 6*cos(A[1]*120+120*m))*cos(A[0]*72+72*l),
                     (9 + 6*cos(A[1]*120+120*m))*sin(A[0]*72+72*l),
                     6*sin(A[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
         translate([(9 + 6*cos(B[1]*120+120*m))*cos(B[0]*72+72*l),
                     (9 + 6*cos(B[1]*120+120*m))*sin(B[0]*72+72*l),
                     6*sin(B[1]*120+120*m)])
         {
             sphere($fn=20, .6, true);
         }
     }
}
}
}