Fractal Cranks
https://gyazo.com/271e145923fdf810b23fd833b4956626
code:java
int _numChildren = 3;
int _maxLevels = 8;
int npic = 64;
Branch _trunk;
void setup() {
size(750, 500);
background(255);
noFill();
smooth();
newTree();
}
void newTree() {
_trunk = new Branch(1, 0, width/2, 50);
_trunk.drawMe();
}
void draw() {
background(255);
_trunk.updateMe(width/2, height/2);
_trunk.drawMe();
if (npic-- > 0 && npic % 2 == 0) {
saveFrame("####.jpg");
}
}
class Branch {
float level, index;
float x, y;
float endx, endy;
float strokeW, alph;
float len, lenChange;
float rot, rotChange;
Branch [] children = new Branch0; Branch(float lev, float ind, float ex, float why) {
level = lev;
index = ind;
strokeW = (1/level) * 10;
alph = 255 / level;
len = (1/level) * random(200);
rot = random(360);
lenChange = random(10) -5;
rotChange = random(10) -5;
updateMe(ex, why);
if (level < _maxLevels) {
for (int x = 0; x < _numChildren; x++) {
childrenx = new Branch(level+1, x, endx, endy); }
}
}
void updateMe(float ex, float why) {
x = ex;
y = why;
rot += rotChange;
if (rot > 360) {
rot = 0;
} else if (rot < 0) {
rot = 360;
}
len -= lenChange;
if (len < 0) {
lenChange *= -1;
} else if (len > 200) {
lenChange *= -1;
}
float radian = radians(rot);
endx = x + (len * cos(radian));
endy = y + (len * sin(radian));
for (int i = 0; i < children.length; i++) {
childreni.updateMe(endx, endy); }
}
void drawMe() {
if (level > 1) {
strokeWeight(strokeW);
stroke(0, alph);
fill(255, alph);
line(x, y, endx, endy);
ellipse(endx, endy, len/12, len/12);
}
for (int i = 0; i < children.length; i++) {
}
}
}