/* snowflake.pde Written by Justin Hsia Draw a Koch snowflake fractal using recursion */ void setup() { size(500,500); strokeWeight(1); } // draws three copies of fractal in a triangle to form the Koch snowflake void draw() { translate(250,100); // start at top point rotate(radians(60)); // rotate to align x-axis with direction of fractal //for(int i=0; i<3; i=i+1) { int i = 0; while(i<3) { //line(0,0,300,0); // replace with fractal //translate(300,0); // replace with fractal snowflake_fractal(4,300); // draw fractal rotate(radians(120)); i = i + 1; } noLoop(); // only run draw() once } // Recursive implementation of the fractal // Compare to initial version by adding base case // and replacing line/translate pairs with recursive calls void snowflake_fractal(int levels, float len) { if(levels==0) { // in base case, draw full line line(0,0,len,0); translate(len,0); } else { snowflake_fractal(levels-1,len/3); rotate(radians(-60)); snowflake_fractal(levels-1,len/3); rotate(radians(120)); snowflake_fractal(levels-1,len/3); rotate(radians(-60)); snowflake_fractal(levels-1,len/3); } } // the initial version of the fractal // equivalent to levels = 1 void snowflake_fractal_initial(float len) { line(0,0,len/3,0); translate(len/3,0); rotate(radians(-60)); line(0,0,len/3,0); translate(len/3,0); rotate(radians(120)); line(0,0,len/3,0); translate(len/3,0); rotate(radians(-60)); line(0,0,len/3,0); translate(len/3,0); }