I made a tank top with laser cut iron-on lace. The same pattern, created computationally from a Voronoi diagram generator, was laser cut out of iron-on adhesive backed fabric three times in different sizes and ironed on the front of the shirt in different rotation positions.
The pattern for the lace was generated using Processing with a Voronoi diagram generator. I modified several parameters in Jennifer’s spiral and circle Voronoi code, which draws points in the pattern of a combination of spirals and circles. Voronoi diagrams are generated from this set of points by partitioning the plane into convex polygons so that each of the points are contained within the polygon and any point in a given polygon is closer to this generating point than to any other generating points (more at Wolfram Math World).
This is the resulting lace pattern after cropping lines which extended beyond the drawing area:
I ironed iron-on adhesive to a piece of yellow lining fabric. Then, I laser cut this pattern three times in slightly different sizes.
I used tweezers to carefully remove the paper backing. Then, I arranged the three lace pieces on the shirt front and ironed them in place.
/*This example illustrates a simple method to generate a set of deliberately placed
points to control the structure of a voronoi diagram. This particular example
combines spiral and circle structures to produce the overall design.*/
void setup() {
size(600,600,P3D); //size of your intended pattern
noLoop(); // don’t need to use the draw loop
/*unique name for your file. if left unchanged,
will simply save file with current milisecond*/
String fileName= “voronoi”+millis()+”.pdf”;
beginRaw(PDF, fileName); //enables you to save your design to a pdf
setupVoronoi(); // create your voronoi generator
// =========GENERATE CIRCLES=============== //
int outerCircle_center=10; // variable to set the center positions of the outer circle
int diameter = 20; //diameter of your circles
/*generates 5 evenly spaced points, one in the center of your stage and 4 in the outside corners
as set by the outerCircle_center value. These points will be the center of the 5 circles in the final design */
voronoi.addPoint(new Vec2D(width/2, height/2)); // adds a new point to your voronoi generator
voronoi.addPoint(new Vec2D(width/outerCircle_center, height/outerCircle_center));
voronoi.addPoint(new Vec2D(width-width/outerCircle_center, height/outerCircle_center));
voronoi.addPoint(new Vec2D(width-width/outerCircle_center, height-height/outerCircle_center));
voronoi.addPoint(new Vec2D(width/outerCircle_center, height-height/outerCircle_center));
int drawLimit = 3; // we will define the circles by a set of evenly spaced points. This variable controls the number of points in your circles
for(int i=0;i<drawLimit;i++){ //loop over the number of points in the circle
float _alpha = (float)Math.PI*2/drawLimit; // determines the degree position of your current point
float cirtheta = i*_alpha; //current position on circle for your intended point
drawPoint(width/2, height/2,cirtheta,diameter); //this will generate the center circle
/*these calls will generate 4 outer circles with diameteriuses that are one half that of your center circle*/
drawPoint(width/outerCircle_center, height/outerCircle_center,cirtheta,diameter/2);
drawPoint(width-width/outerCircle_center, height/outerCircle_center,cirtheta,diameter/2);
drawPoint(width-width/outerCircle_center, height-height/outerCircle_center,cirtheta,diameter/2);
drawPoint(width/outerCircle_center, height-height/outerCircle_center,cirtheta,diameter/2);
}
// =========GENERATE SPIRALS=============== //
int centerLimit = 300; // variable to control the diameter of the spiral
int theta = 0; //increases with every point in your spiral, producing the spiral effect.
//this will draw the four smaller spirals
theta=0; //reset theta
//this will draw the four larger spirals
for(int k=0;k<centerLimit;k++){
theta +=1;
drawPoint(width/2,height/4,theta/16,theta/2);
drawPoint(width/2,height-height/4,theta/16,theta/2);
drawPoint(width/4,height/2,theta/16,theta/2);
drawPoint(width-width/4,height/2 ,theta/16,theta/2);
}
drawVoronoi(); //renders your voronoi
endRaw(); //ends the recording
}
void drawPoint(float orgX, float orgY, float theta, float diameter) { //function that generates and adds circular points
float xPos = sin(theta)*diameter+orgX;
float yPos = cos(theta)*diameter+orgY;
voronoi.addPoint(new Vec2D(xPos, yPos));
}