How to draw a tree
Imagine you were describing how to draw a tree. You might say:
- Draw a vertical line
- At the top of the line, draw two smaller lines ("branches") in a v shape
- At the ends of each of those two branches, draw two even smaller branches
- Keep repeating the process, drawing smaller and smaller branches until the branches are too small to draw
This process of repeating the same design at a continually decreasing scale is an example of a fractal. Using fractals to draw trees can give some interesting and beautiful patterns. In this assignment we will use a recursive branching function to create a fractal tree.
-
Fork and clone down this repository
-
Run the program. It should draw a single green line on the screen. This will be the "trunk" of the Fractal Tree. Notice the three
private
variables. Changing the numbers in theseprivate
variables will change the appearance of the tree, i.e. how much smaller the branches are, how small the branches will get and the angle between the branches. -
Now we'll write a function to draw the branches on the tree Here's some pseudocode describing the
drawBranches
function:-
declare two local
double
variables:angle1
andangle2
. These will hold the angles of the branches. Initialize one toangle
plusbranchAngle
and the other toangle
minusbranchAngle
. This will create the V shape of the branches. -
reduce
branchLength
by multiplying it byfractionLength
. This will be the (shorter) length of the new branch. -
While the starting point of the new branches is just the endpoint of the previous branch or trunk, we'll have to use some trig to calculate the branches endpoints before we can draw them. Declare four local variables
endX1
endY1
endX2
endY2
. We can calculate the endpoints with code like:int endX1 = (int)(branchLength*Math.cos(angle1) + x);
int endY1 = (int)(branchLength*Math.sin(angle1) + y);
-
Now, draw two lines, both starting from (
x
,y
) but ending at the two different end points you just calculated.
-
-
Now go back to the
draw
function, and uncomment the call todrawBranches
. You'll fill in the four arguments:320
and380
(the endpoint of the trunk is the starting point of the two branches)100
(the length of the trunk)3*Math.PI/2
(The angle of the trunk--a vertical angle in Java's system of radian measure). You should now see two branches in a V shape on the end of the trunk. -
Now, the magic starts! We're going to use recursion to put branches on the branches! At the end of the
drawBranches
function write code so that ifbranchLength
is larger thansmallestBranch
,drawBranches
is called twice, once for each of the endpoints, e.g. (endX1
,endY1
). Be sure to use the two different angles for the two different branches. You should now see a fully formed Fractal Tree!
The program becomes more interesting when you can adjust branchAngle
fractionLength
and smallestBranch
. You could add a keyTyped()
function that allows the user to adjust those values and then call redraw()
to draw the screen again.
You could also have the width of the branches change with the length. You might introduce a little bit of randomness to the branch angles for more realism. You could even add a third, middle branch to make a more realistic looking tree or even more than 3 branches. There are many other types of Fractal Trees. The Pythagorian Tree Fractal is another interesting variation. Browse the internet and see what ideas you can come up with, your fractal tree doesn't have to look like any other.
Gordon
Emil
Prescott
Ryan
Mandy
Benjamin
Oona
Karlee
Tatiana
Emma
Ashton
Cynthia
Sherissa
James
Andrew
Claudia
Jasmine
Chanel
Sarah
Jing
Warren
Andy
Jeffrey
Vincent
Kelly
Lancy
Jeffrey
Kris
Bryce
Yolanda
Vivian
Sophie
Jenna
Andrew
Janet
Ben
Robert
Katie
Erica
Brandon
Eric
Dillon
Karen
Jenny
Nathan
Dean
Makoi
Kenny
Mi-Kaela
Lydia
Samantha
Schuyler
Jayden
Maxwell
Arthur
Otto
Andrew
Nicholas
Michael
Garvin
Joanna
Tatiana
Kenneth
Steve
Kirby
Winfield
Joshua
Edmond
Bryan
Will
Elton
Emma
Ryan
Preston
Thanawat
Aaron
Nghi
Andrea
Hannah