voronoi flower
by lefroyobunny
This week I explored the creative process of creating voronois through code and materiality. I created several patterns through using the Fortune’s Algorithm, which essentially sweeps a line across a place of points and draws parabolas between the points. A parabola is equidistant from one of the points, and the place that the parabolas intersect traces out the boundary of the voronoi diagram. Here are a few of the voronoi I made but didn’t cut (due to time constraints). Nonetheless, they still look very interesting.
During the exploration course, I found a voronoi shape that I became very found of. It is a simple flower shape with one spiral which branches out from the center. The geometry is very simple yet many astonishing moments which I have chosen to capture through photography.
I found the ‘rails’ of this voronoi simple yet beautiful.
This is an image taken of the back of a cut sheet using the metal + heavy paper which did not cut through.
The way that light travels through this voronoi creates and interesting halo.
The centers of this particular cutting is very delicate and I dare not pull the small pieces out.
Lastly, here is the processing code to generate this pattern.
void setup() {
size(800,800,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 SPIRAL=============== //
int centerLimit = 500; // variable to control the maximum diameter of the spiral
float theta = .2; //like the diameter of your circle, but increases with every point in your spiral, producing the spiral effect.
//this will draw one spiral
for(int k=0;k theta +=.7; //change to alter the tightness of your spiral
drawPoint(width/2,height/2,theta,theta);
}
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));