A very classic example of this is to draw a "tree". This is done by drawing a line, just a line in a function, but then in the call, calling itself again twice. The call to itself is then modified to have a slightly shorter line, and at an angle... Enough talk. This is about "learn by doing". Here is the code:
// Run once
void setup() {
frameRate(30);
// size(1000, 1000);
fullScreen();
}
// Run "frameRate" times per secont
void draw() {
// angle is the amount of tilt we do on the line.
// In radians : 2*PI radians = 360 degrees
float angle = (width/2-mouseX)*TWO_PI/width;
// len is the length of the first line
float len = (height-mouseY)/2;
background(0); // Black
smooth(4);
stroke(255); // White
// Print the text
text("Len = " + len + " Angle(radians) = " + angle, 15, 15);
// Call the tree function (once)
tree(width/2, height, len, -PI/2, angle);
}
// This is the recursive function
void tree(float x, float y, float len, float alpha, float gamma) {
line(int(x), int(y), int(x+len*cos(alpha)), int(y+len*sin(alpha)));
// We need to have some termination condition. In our case we stop
// Calling recursive once the length has decreased to 1
if (len>1) {
// We change the len and alpha for each call to make up the "tree"
tree(x+len*cos(alpha), y+len*sin(alpha), len*0.64, alpha-gamma, gamma);
tree(x+len*cos(alpha), y+len*sin(alpha), len*0.64, alpha+gamma, gamma);
}
}
Now, some math understanding is required to really see what is going on, but please just copy, paste and run. Move the mouse! Read the text! Have fun!
No comments:
Post a Comment