Turtles and Fractals
Ron Goldman Department of Computer Science Rice University Fractals
Sierpinski Triangle Fractal Swiss Flag
Koch Snowflake C-Curve Basic Turtle Programs
POLY (Length, Angle) Repeat Forever FORWARD (Length) TURN (Angle)
SPIRAL (Length, Angle, Scalefactor) Repeat Forever FORWARD (Length) TURN (Angle) RESIZE (Scalefactor) Propositions
POLY Proposition The vertices generated by the POLY program lie on a circle.
SPIRAL Proposition The vertices generated by the SPIRAL program lie on a spiral. Examples of POLY Procedures
Angle = π / 5 Angle = 3π / 7 Angle = π 2 / 2
€ € € Proof of POLY Proposition
F A • G α β A L • L E α R •α R € x = R
L R •C α D •
ΔCDE ≅ ΔCEF (SSS) A + β +α = A +α +α ⇒ β = α ΔCEF ≅ ΔCFG (SAS) ∴ x = R
€ Looping Lemmas
Circle Looping Lemma Any procedure that is a repetition of the same collection of FORWARD and TURN commands has the structure of POLY(Length, Angle), where Angle = Total Turning within the Loop Length = Total Distance traveled within the Loop That is, the two programs have the same boundedness, closing, and symmetry.
In particular, if Angle ≠ 2πk for some integer k, then all the vertices generated by the same FORWARD command inside the loop lie on a common circle.
€ Looping Lemmas (continued)
Spiral Looping Lemma Any procedure that is a repetition of the same collection of FORWARD, TURN, and RESIZE commands has the structure of SPIRAL(Length, Angle, Scalefactor), where Angle = Total Turning within the Loop Length = Total Distance traveled within the Loop Scalefactor = Total Scaling within the Loop That is, the two programs have the same boundedness and symmetry.
In particular, if Angle ≠ 2πk for some integer k, and Scalefactor ≠ ±1, then all the vertices generated by the same FORWARD command inside the loop lie on a common spiral. € €
Looping Program and Polygon Procedure • Looping Pr ogram
Polygon Procedure •
• Looping Pr ogram Sample Looping Program
WALK Repeat Forever FORWARD 1 TURN π / 3 FORWARD 1/ 4 TURN / 4 € π FORWARD 1/ 3 € TURN / 2 € −π FORWARD 3/5 € TURN /6 € π € € Looping Curve More Sample Looping Program
PolySpiral Repeat 20 Spin[2π /20 Scale[1.01 Poly[5, 2 /5] € π ]]]
StarSpiral € Repeat 20 Spin[2π /20 Scale[1.1 Poly[5, 4 /5] € π ]]]
€ Looping Spirals
PolySpiral StarSpiral Recursion
Problem: How can we generate more interesting shapes from turtle programs?
Solution: Recursion
Fractals: Recursion made visible. Motivation for Fractals
Representing Natural Objects • Snowflakes, Mountains, Trees K
Drawing Interesting Pictures
Exploring Novel Mathematics
Performing Data Compression Fractal Curves and Turtle Programs
Fractal Curves • Fractal curves usually cannot be represented by simple analytic expressions. • Fractal curves are generally defined by -- Recursive Procedures -- Iterated Transformations -- Infinite Series
Turtle Programs • Recursion is used to express self-similarity. • Coordinates are irrelevant to shape. • Turtle programs are easily translated into fractal programs.
Examples • Fractal Gaskets • Bump Fractals • Other Self-Similar Fractals Sierpinski Gasket Sierpinski Gasket
Main Idea • Make a smaller Sierpinski gasket at one of the corners. • Then move to another corner and make another small Sierpinski gasket. • Then move to another corner and make another small Sierpinski gasket. • Then return the turtle to its initial position and heading.
Recursive Turtle Program Sierpinski(Level) If Level = 0, Draw a Triangle Else Repeat 3 Times RESIZE 1/2 Sierpinski(Level–1) RESIZE 2 MOVE 1 TURN 2π /3
€ More Fractal Gaskets
Pentagonal Gasket Fractal Swiss Flag Rectangular Gasket Koch Curve
Koch Bump
Koch Curve Koch Curve
Basic Idea • Make a smaller Koch curve along the first edge of the bump. • Then move to the next edge and make another small Koch curve. • Then move to the next edge and make another small Koch curve. • Then move to the next edge and make another small Koch curve.
Simpler Approach • Replace each straight line on the bump by a Koch curve. • Replace each FORWARD command by a recursive call. Koch Curve
Koch Bump Koch(Level) If Level = 0, FORWARD 1 Else RESIZE 1/3 → RESIZE 1/3 FORWARD 1 → Koch(Level-1) TURN 60 → TURN 60 FORWARD 1 → Koch(Level-1) TURN −120 → TURN −120 FORWARD 1 → Koch(Level-1) TURN 60 → TURN 60 FORWARD 1 → Koch(Level-1) RESIZE 3 → RESIZE 3 Universal Bump–Fractal Program
Bump Bump_Fractal(Level) If Level = 0, FORWARD 1 Else
TURN A1 TURN A1 RESIZE S1 → RESIZE S1 FORWARD 1 → Bump_Fractal(Level −1)
TURN A2 → TURN A2 €R ESIZE S2 → €R ESIZE S2 FORWARD 1 → Bum€p_F ractal(Level −1) € €
€ M € M FORWARD 1 → Bump_Fractal(Level −1) € RESIZE Sn+1 → RESIZE Sn+1 TURN An+1 → TURN An+1 € € € € € Typical Bump Assumptions
1. Turtle Final Orientation = Turtle Initial Orientation • Total Turning = 0 n+1 • ∑ Ak = 0 k=1
2. Turtle Returns to Initial Line € • Total Y–Distance = 0 n k • ∑ SkSin ∑ Aj = 0 k=1 j=1
3. Turtle Travels Distance=Size Along Initial Line € • Total X–Distance = Size n k • ∑ SkCos ∑ Aj =1 k=1 j=1
€ C–Curve
C-Bump
C-Curve C–Curve
Bump C(Level) If Level = 0, FORWARD 1 Else TURN 45 → TURN 45 2 2 RESIZE → RESIZE 2 2 FORWARD 1 → C(Level −1) TURN −90 → TURN −90 € € FORWARD 1 → C(Level −1) TURN 45 →€ TURN 45 RESIZE 2 → RESIZE 2 €
€ € More Bumps on Bumps
Additional Examples • Rectangular Bumps • Pentagonal Bumps • Space Filling Curves
Additional Extensions • Scales and Angles can be selected randomly. • Each FORWARD command can be replaced by a different FRACTAL program. • Fractal programs can be connected with TURN and FORWARD transitions. More Self-Similar Fractals
Fractal Hangman Fractal Bush Fractal Tree More Self-Similar Fractals
Fractal Star Fractal Flower Fractal Leaf