Skip to content

Commit 6a2f6fc

Browse files
committed
blog: How Fractal Flora
1 parent b537da9 commit 6a2f6fc

File tree

3 files changed

+153
-294
lines changed

3 files changed

+153
-294
lines changed
87 KB
Loading
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
Have you ever wondered how nature creates such intricate and beautiful patterns,
2+
from the branching of trees to the delicate veins of a leaf? Much of this complexity can be explained by surprisingly simple rules,
3+
often involving **fractals** and **recursion**.
4+
Our new "Fractal Flora" app lets you explore these principles by growing your own digital trees with a few sliders.
5+
6+
This post will peel back the layers and explain the core mechanics behind the app.
7+
8+
![/images/projects/fractal-flora.png](/images/projects/fractal-flora.png)
9+
10+
## What is a Fractal Tree?
11+
12+
At its heart, a fractal tree is a structure where a basic branching pattern repeats itself at smaller scales. Each branch can be thought of as a miniature version of the entire tree. This self-similarity is a hallmark of fractals.
13+
14+
In programming, this concept is perfectly suited for **recursion**, where a function calls itself to solve smaller instances of the same problem.
15+
16+
## The Recursive Algorithm: `drawBranch`
17+
18+
The entire tree is generated by a single, powerful recursive function, let's call it `branch()`. It takes a starting point, a length, an angle, and its current depth in the tree.
19+
20+
Here's a simplified look at its logic:
21+
22+
1. **Draw the Current Branch:** It draws a line segment from its starting point, at its given length and angle.
23+
2. **Base Case (Stop Condition):** If the `depth` (how many times it has branched) reaches zero, it stops. This prevents infinite recursion.
24+
3. **Branch Out:** Otherwise, it calculates the endpoint of the current branch. From this endpoint, it calls itself *twice* (or more), creating two new "sub-branches." Each sub-branch is drawn with a shorter length, a new angle (offset from the parent branch), and a reduced depth.
25+
26+
```javascript
27+
const branch = (x, y, len, ang, d) => {
28+
// 1. Calculate end point of current branch
29+
const endX = x + len * Math.cos((ang * Math.PI) / 180);
30+
const endY = y + len * Math.sin((ang * Math.PI) / 180);
31+
32+
// 2. Draw the branch (context.drawLine(x,y,endX,endY))
33+
34+
// 3. If not at max depth, recurse
35+
if (d > 0) {
36+
const nextLen = len * lengthMultiplier; // e.g., 0.7
37+
// Right branch
38+
branch(endX, endY, nextLen, ang + branchAngle, d - 1);
39+
// Left branch
40+
branch(endX, endY, nextLen, ang - branchAngle, d - 1);
41+
}
42+
};
43+
44+
// Initial call (e.g., from bottom center of canvas)
45+
// branch(canvas.width / 2, canvas.height, initialLength, -90, maxDepth);
46+
```
47+
*(Note: The actual implementation in `FractalFloraPage.js` is slightly more complex, handling canvas transformations, line widths, and randomized elements.)*
48+
49+
## The "DNA" of Your Digital Tree
50+
51+
The beauty of Fractal Flora lies in how these simple parameters (the tree's "DNA") dramatically change its appearance:
52+
53+
* **Recursion Depth (`depth`):** This controls how many times the `branch()` function calls itself. A higher depth creates a denser, more complex tree, but also requires more computation.
54+
* **Branch Angle (`angle`):** This is the angle at which new branches diverge from the parent branch. Small angles create tall, narrow trees, while larger angles create wider, more sprawling structures.
55+
* **Length Multiplier (`lengthMultiplier`):** This determines how much shorter each successive branch becomes. A value of `0.7` means a new branch is 70% the length of its parent.
56+
* **Trunk Base Size (`lengthBase`):** The initial length of the very first (main) trunk segment.
57+
* **Wind / Asymmetry (`asymmetry`):** This parameter adds a bias to the branching angle, making one side of the tree grow more dominantly, simulating the effect of wind or environmental factors.
58+
* **Organic Randomness (`randomness`):** This introduces slight, random variations to the length and angle of each branch, breaking the perfect symmetry of mathematical fractals and making the tree appear more organic and natural.
59+
60+
### Seasons and Color Palettes
61+
62+
The app also cycles through different "seasons." These aren't complex simulations, but rather pre-defined color palettes for the trunk, branches, and leaves, instantly changing the mood and appearance of your flora.
63+
64+
## From Math to Art
65+
66+
What's fascinating is how a few lines of code, driven by recursive mathematical principles, can generate forms that closely mimic those found in nature. Fractals are not just abstract mathematical concepts; they are the language of growth, efficiency, and beauty in the natural world.
67+
68+
Now that you understand the "how," dive back into the Fractal Flora app and become a digital botanist, experimenting with its DNA to create your own unique, algorithmic arboretum!

0 commit comments

Comments
 (0)