Harter-Heighway Dragon Fractal
Loading the math board and drawing, please wait…
In collections
Developing games and puzzles with 3D printing for STEAM
This example demonstrates the construction and iteration process of the Harter-Heighway Dragon fractal. Key math concepts include fractal geometry, iterative sequences, and geometric transformations. The construction uses the PolyLine command to draw polygons, with a button controlling iteration count n, initial points A1, A2, A3, and transformation parameters m, b, executing steps 1-13 for each iteration. Suitable for high school and above students to understand the principles of fractal pattern generation and geometric transformation applications.
GeoGebra Commands & Parameters
PolyLine(A1, A2, A3) → step1PolyLine(Join[{Join[Sequence[{Vertex[step1, (2 * k) - 1], Dilate[Rotate[Vertex[step1, (2 * k)], 315°, Vertex[step1, (2 * k) - 1]], 1 / sqrt(2), Vertex[step1, (2 * k) - 1]], Vertex[step1, (2 * k)], Dilate[Rotate[Vertex[step1, (2 * k) + 1], 45°, Vertex[step1, (2 * k)]], 1 / sqrt(2), Vertex[step1, (2 * k)]]}, k, 1, (Length[{Vertex[step1]}] - 1) / 2]], {Vertex[step1, Length[{Vertex[step1]}]]}}]) → step2PolyLine(Join[{Join[Sequence[{Vertex[step2, (2 * k) - 1], Dilate[Rotate[Vertex[step2, (2 * k)], 315°, Vertex[step2, (2 * k) - 1]], 1 / sqrt(2), Vertex[step2, (2 * k) - 1]], Vertex[step2, (2 * k)], Dilate[Rotate[Vertex[step2, (2 * k) + 1], 45°, Vertex[step2, (2 * k)]], 1 / sqrt(2), Vertex[step2, (2 * k)]]}, k, 1, (Length[{Vertex[step2]}] - 1) / 2]], {Vertex[step2, Length[{Vertex[step2]}]]}}]) → step3PolyLine(Join[{Join[Sequence[{Vertex[step3, (2 * k) - 1], Dilate[Rotate[Vertex[step3, (2 * k)], 315°, Vertex[step3, (2 * k) - 1]], 1 / sqrt(2), Vertex[step3, (2 * k) - 1]], Vertex[step3, (2 * k)], Dilate[Rotate[Vertex[step3, (2 * k) + 1], 45°, Vertex[step3, (2 * k)]], 1 / sqrt(2), Vertex[step3, (2 * k)]]}, k, 1, (Length[{Vertex[step3]}] - 1) / 2]], {Vertex[step3, Length[{Vertex[step3]}]]}}]) → step4PolyLine(Join[{Join[Sequence[{Vertex[step4, (2 * k) - 1], Dilate[Rotate[Vertex[step4, (2 * k)], 315°, Vertex[step4, (2 * k) - 1]], 1 / sqrt(2), Vertex[step4, (2 * k) - 1]], Vertex[step4, (2 * k)], Dilate[Rotate[Vertex[step4, (2 * k) + 1], 45°, Vertex[step4, (2 * k)]], 1 / sqrt(2), Vertex[step4, (2 * k)]]}, k, 1, (Length[{Vertex[step4]}] - 1) / 2]], {Vertex[step4, Length[{Vertex[step4]}]]}}]) → step5PolyLine(Join[{Join[Sequence[{Vertex[step5, (2 * k) - 1], Dilate[Rotate[Vertex[step5, (2 * k)], 315°, Vertex[step5, (2 * k) - 1]], 1 / sqrt(2), Vertex[step5, (2 * k) - 1]], Vertex[step5, (2 * k)], Dilate[Rotate[Vertex[step5, (2 * k) + 1], 45°, Vertex[step5, (2 * k)]], 1 / sqrt(2), Vertex[step5, (2 * k)]]}, k, 1, (Length[{Vertex[step5]}] - 1) / 2]], {Vertex[step5, Length[{Vertex[step5]}]]}}]) → step6PolyLine(Join[{Join[Sequence[{Vertex[step6, (2 * k) - 1], Dilate[Rotate[Vertex[step6, (2 * k)], 315°, Vertex[step6, (2 * k) - 1]], 1 / sqrt(2), Vertex[step6, (2 * k) - 1]], Vertex[step6, (2 * k)], Dilate[Rotate[Vertex[step6, (2 * k) + 1], 45°, Vertex[step6, (2 * k)]], 1 / sqrt(2), Vertex[step6, (2 * k)]]}, k, 1, (Length[{Vertex[step6]}] - 1) / 2]], {Vertex[step6, Length[{Vertex[step6]}]]}}]) → step7PolyLine(Join[{Join[Sequence[{Vertex[step7, (2 * k) - 1], Dilate[Rotate[Vertex[step7, (2 * k)], 315°, Vertex[step7, (2 * k) - 1]], 1 / sqrt(2), Vertex[step7, (2 * k) - 1]], Vertex[step7, (2 * k)], Dilate[Rotate[Vertex[step7, (2 * k) + 1], 45°, Vertex[step7, (2 * k)]], 1 / sqrt(2), Vertex[step7, (2 * k)]]}, k, 1, (Length[{Vertex[step7]}] - 1) / 2]], {Vertex[step7, Length[{Vertex[step7]}]]}}]) → step8PolyLine(Join[{Join[Sequence[{Vertex[step8, (2 * k) - 1], Dilate[Rotate[Vertex[step8, (2 * k)], 315°, Vertex[step8, (2 * k) - 1]], 1 / sqrt(2), Vertex[step8, (2 * k) - 1]], Vertex[step8, (2 * k)], Dilate[Rotate[Vertex[step8, (2 * k) + 1], 45°, Vertex[step8, (2 * k)]], 1 / sqrt(2), Vertex[step8, (2 * k)]]}, k, 1, (Length[{Vertex[step8]}] - 1) / 2]], {Vertex[step8, Length[{Vertex[step8]}]]}}]) → step9PolyLine(Join[{Join[Sequence[{Vertex[step9, (2 * k) - 1], Dilate[Rotate[Vertex[step9, (2 * k)], 315°, Vertex[step9, (2 * k) - 1]], 1 / sqrt(2), Vertex[step9, (2 * k) - 1]], Vertex[step9, (2 * k)], Dilate[Rotate[Vertex[step9, (2 * k) + 1], 45°, Vertex[step9, (2 * k)]], 1 / sqrt(2), Vertex[step9, (2 * k)]]}, k, 1, (Length[{Vertex[step9]}] - 1) / 2]], {Vertex[step9, Length[{Vertex[step9]}]]}}]) → step10PolyLine(Join[{Join[Sequence[{Vertex[step10, (2 * k) - 1], Dilate[Rotate[Vertex[step10, (2 * k)], 315°, Vertex[step10, (2 * k) - 1]], 1 / sqrt(2), Vertex[step10, (2 * k) - 1]], Vertex[step10, (2 * k)], Dilate[Rotate[Vertex[step10, (2 * k) + 1], 45°, Vertex[step10, (2 * k)]], 1 / sqrt(2), Vertex[step10, (2 * k)]]}, k, 1, (Length[{Vertex[step10]}] - 1) / 2]], {Vertex[step10, Length[{Vertex[step10]}]]}}]) → step11PolyLine(Join[{Join[Sequence[{Vertex[step11, (2 * k) - 1], Dilate[Rotate[Vertex[step11, (2 * k)], 315°, Vertex[step11, (2 * k) - 1]], 1 / sqrt(2), Vertex[step11, (2 * k) - 1]], Vertex[step11, (2 * k)], Dilate[Rotate[Vertex[step11, (2 * k) + 1], 45°, Vertex[step11, (2 * k)]], 1 / sqrt(2), Vertex[step11, (2 * k)]]}, k, 1, (Length[{Vertex[step11]}] - 1) / 2]], {Vertex[step11, Length[{Vertex[step11]}]]}}]) → step12PolyLine(Join[{Join[Sequence[{Vertex[step12, (2 * k) - 1], Dilate[Rotate[Vertex[step12, (2 * k)], 315°, Vertex[step12, (2 * k) - 1]], 1 / sqrt(2), Vertex[step12, (2 * k) - 1]], Vertex[step12, (2 * k)], Dilate[Rotate[Vertex[step12, (2 * k) + 1], 45°, Vertex[step12, (2 * k)]], 1 / sqrt(2), Vertex[step12, (2 * k)]]}, k, 1, (Length[{Vertex[step12]}] - 1) / 2]], {Vertex[step12, Length[{Vertex[step12]}]]}}]) → step13