//Koch Snowflake
//Recursive code for Koch Snowflake.
import processing.pdf.*;
int maxLevel=5;
float len=500;
void setup()
{
size(1000, 800);
beginRecord(PDF, "KochSnowflake.pdf");
strokeJoin(ROUND);
colorMode(RGB,255,255,255) ;
background(255);
stroke(0);
smooth();
noFill();
strokeWeight(1);
translate(width/2-250,height/2+150);
drawTree(0.0, 0.0, len,maxLevel);
translate(500,0);
rotate(-2*PI/3);
drawTree(0.0, 0.0, len,maxLevel);
translate(500,0);
rotate(-2*PI/3);
drawTree(0.0, 0.0, len,maxLevel);
endRecord();
}
void drawTree(float x, float y, float wide, int level)
{
if(level > 0) {
pushMatrix();
translate(0,0);
drawTree(x, y, wide/3, level-1);
popMatrix();
pushMatrix();
translate(wide/3,0);
rotate(PI/3);
drawTree(x, y, wide/3, level-1);
popMatrix();
pushMatrix();
translate(wide/3+wide/6,wide*tan(PI/3)/6);
rotate(-PI/3);
drawTree(x, y, wide/3, level-1);
popMatrix();
pushMatrix();
translate(2*wide/3,0);
drawTree(x, y, wide/3, level-1);
popMatrix();
if (level==1){
line(x,y,x+wide,y);
}
}
}
|
The code given below is generalized for both Cesaro fractal and Koch snowflake.The code is recursive . //Flakes
/*
Change value of angle1 and angle2 for different types of flakes
Cesaro Fractal(angle1=85,angle2=90),
Hexagonal Cesaro(angle1=85,angle2=60),
Inverted Cesaro Fractal(angle1=-85,angle2=90),
Inverted Hexagonal Cesaro(angle1=-85,angle2=60),
Pentagonal Cesaro(angle1=85,angle2=72),
Koch Snowflake(angle1=60,angle2=120),
Inverted Koch Snowflake(angle1=-60,angle2=120),
*/
int maxLevel=5;//level of recursion
float len=200;
float angle1=radians(85);//base angle
float angle2=90;
float polyAngle=radians(angle2);//angle for polygon
float count=(int)360/angle2;
float sca=2+2*cos(angle1);//scale factor
void setup(){
size(800, 800);
colorMode(RGB,255,255,255) ;
background(255);
stroke(0);
smooth();
noFill();
strokeWeight(1);
translate(width/2-100,height/2-100);
drawTree(0.0, 0.0, len,maxLevel);
for(int n=0;n<count-1;n++){
translate(len,0);
rotate(polyAngle);
drawTree(0.0, 0.0, len,maxLevel);
}
}
void drawTree(float x, float y, float wide, int level){
if(level > 0) {
pushMatrix();
translate(0,0);
drawTree(x, y, wide/sca, level-1);
popMatrix();
pushMatrix();
translate(wide/sca,0);
rotate(angle1);
drawTree(x, y, wide/sca, level-1);
popMatrix();
pushMatrix();
translate(wide/sca+wide/sca*cos(-angle1),wide*sin(angle1)/sca);
rotate(-angle1);
drawTree(x, y, wide/sca, level-1);
popMatrix();
pushMatrix();
translate(wide/sca+wide*cos(angle1)/sca*2,0);
drawTree(x, y, wide/sca, level-1);
popMatrix();
if (level==1){
line(x,y,x+wide,y);
}
}
}
|
|
|