Here is a very simple tree with two branches:
Two-branch tree
These are the steps that a simple computer program follows to draw the tree, with a red arrow indicating where the computer’s focus is at each stage:
Two-branch tree stage 1
2-Tree stage 2
2-Tree stage 3
2-Tree stage 4
2-Tree (animated)
If you had to give the computer an explicit instruction at each stage, the instructions might look something like this:
1. Start at node 1, draw a left branch to node 2 and colour the node green.
2. Return to node 1.
3. Draw a right branch to node 3 and colour the node green.
4. Finish.
Now try a slightly less simple tree with branches that fork twice:
Four-branch tree (static)
These are the steps that a simple computer program follows to draw the tree, with a red arrow indicating where the computer’s focus is at each stage:
4-Tree #1
4-Tree #2
4-Tree #3
4-Tree #4
4-Tree #5
4-Tree #6
4-Tree #7
4-Tree #8
4-Tree #9
4-Tree #10
4-Tree #11
4-Tree (animated)
If you had to give the computer an explicit instruction at each stage, the instructions might look something like this:
1. Start at node 1 and draw a left branch to node 2.
2. Draw a left branch to node 3 and colour it green.
3. Return to node 2.
4. Draw a right branch to node 4 and colour it green.
5. Return to node 2.
6. Return to node 1.
7. Draw a right branch to node 5.
8. Draw a left branch to node 6.
9. Draw a left branch to node 7 and colour it green.
10. Return to node 6.
11. Draw a left branch to node 8 and colour it green.
12. Finish.
It’s easy to see that the list of instructions would be much bigger for a tree with branches that fork three times, let alone four times or you. But you don’t need to give a full set of explicit instructions: you can use a program, or a list of instructions using variables. Suppose the tree has branches that fork f times. If f = 4, you will need an array variable level() with four values, level(1), level(2), level(3) and level(4). Now follow these instructions:
1. li = 1, level(1) = 0, level(2) = 0, ... level(f+1) = 0
2. level(li) = level(li) + 1
3. If level(li) = 1, draw a branch to the left and jump to step 7
4. If level(li) = 2, draw a branch to the right and jump to step 7
5. li = li - 1 (note that this line is reached if the tests fail in lines 3 and 4)
6. If li > 0, jump to step 2, otherwise jump to step 11
7. If li = f, draw a green node and jump to step 5
9. li = li + 1
10. Jump to step 2
11. Finish.
By changing the value of f, a computer can use those eleven basic instructions to draw any size of tree (I’ve left out details like changes in the length of branches and so on). When f = 4, the tree will look like this:
16-Tree (static)
16-Tree (animated)
With simple adjustments, the program can be used for other shapes whose underlying structure can be represented symbolically as a tree. The program is in fact a fractalizer, that is, it draws a fractal. So if you use a version of the program to draw fractals based on right-triangles, you can say you are “tright treeing” (tright = triangle-that-is-right).
Here is some tright treeing. Start with a simple isoceles right-triangle. It can be divided into smaller isoceles right-triangles by finding the midpoint of the hypotenuse, then repeating:
Right-triangle rep-2 stage 1
Right-triangle #2
Tright #3
Tright #4
Tright #5
Tright #6
Tright #7
Tright #7 (no internal lines)
You can distort the isoceles right-triangle in interesting ways by finding the midpoint of a side other than the hypotenuse, like this:
Right-triangle (distorted) #1
Distorted tright #2
Distorted tright #3
Distorted tright #4
Distorted tright #5
Distorted tright #6
Distorted tright #7
Distorted tright #8
Distorted tright #9
Distorted tright #10
Distorted tright #11
Distorted tright #12
Distorted tright #13
Distorted tright (animated)
Here’s a different right-triangle. When you divide it regularly, it looks like this:
Right-triangle rep-3 stage 1
Rep-3 Tright #2
3-Tright #3
3-Tright #4
3-Tright #5
3-Tright #6
3-Tright #7
3-Tright #8
3-Tright #9
3-Tright (one colour)
When you distort the divisions, you can create interesting fractals (click on images for larger versions):
Distorted 3-Tright
Distorted 3-Tright
Distorted 3-Tright
Distorted 3-Tright
Distorted 3-Tright
Distorted 3-Tright
Distorted 3-Tright (animated)
And when four of the distorted right-triangles (rep-2 or rep-3) are joined in a diamond, you can create shapes like these:
Creating a diamond #1
Creating a diamond #2
Creating a diamond #3
Creating a diamond #4
Creating a diamond (animated)
Rep-3 right-triangle diamond (divided)
Rep-3 right-triangle diamond (single colour)
Distorted rep-3 right-triangle diamond
Distorted 3-tright diamond
Distorted 3-tright diamond
Distorted 3-tright diamond
Distorted 3-tright diamond
Distorted 3-tright diamond
Distorted 3-tright diamond
Distorted 3-tright diamond
Distorted 3-tright diamond
Distorted 3-tright diamond
Distorted 3-tright diamond
Distorted 3-tright diamond (animated)
Distorted rep-2 right-triangle
Distorted 2-tright diamond
Distorted 2-tright diamond
Distorted 2-tright diamond
Distorted 2-tright diamond
Distorted 2-tright diamond (animated)