- Options

# Pythagoras Tree

The Pythagoras Tree is constructed by starting with a square and attaching a right triangle to the top of it. From there, add squares to the remaining two sides of the triangle. Repeat that process to generate the tree.

Given two points defining a square, we can generate the tree as follows:

```
function pythagorasTree(p1: Vec2D, p2: Vec2D, depth = 0) {
const [x1, y1] = p1;
const [x2, y2] = p2;
const d: Vec2D = [y1 - y2, x2 - x1];
// Determine remaining points of the square
const p3 = Vector.sub(p2, d);
const p4 = Vector.sub(p1, d);
drawPoly([p1, p2, p3, p4], config.color);
if (depth === config.iterations) return;
// Determine tip of the triangle
const p5 = thirdPoint(p3, p4);
drawPoly([p3, p4, p5], config.color);
// Repeat with the points on the triangle as new base
drawBranch(p4, p5, depth + 1);
drawBranch(p5, p3, depth + 1);
}
```

See also Pythagoras Tree.