Harter-Heighway Dragon Fractal

Harter-Heighway Dragon Fractal
Loading the math board and drawing, please wait…
2018-10-30 07:12
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

  1. PolyLine(A1, A2, A3) → step1
  2. PolyLine(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]}]]}}]) → step2
  3. PolyLine(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]}]]}}]) → step3
  4. PolyLine(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]}]]}}]) → step4
  5. PolyLine(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]}]]}}]) → step5
  6. PolyLine(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]}]]}}]) → step6
  7. PolyLine(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]}]]}}]) → step7
  8. PolyLine(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]}]]}}]) → step8
  9. PolyLine(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]}]]}}]) → step9
  10. PolyLine(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]}]]}}]) → step10
  11. PolyLine(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]}]]}}]) → step11
  12. PolyLine(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]}]]}}]) → step12
  13. PolyLine(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