Construction

The boundary of the Koch Snowflake constructed by Helge Von Koch in 1904 is the union of three congruent self-similar fractals. Each third of the snowflake is constructed by starting with one side of an equilateral triangle and performing an iterative process. The following cell defines a function called Snowflake that illustrates the stages in this iterative process.

```Input :=

(*  Given a non-negative integer n, the function
Snowflake generates the nth level approximation
to the Koch Snowflake. Code from the Notices of
the AMS Vol.39 #7 Sept 92, page 709              *)

Clear[n,Snowflake,start,finish,doline]
Snowflake[n_Integer?NonNegative]:=
Show[Graphics[
Nest[ (#1/.Line[{start_,finish_}] :>doline[start,
finish]) &,
{Line[{{0,0},{1/2,Sqrt[3]/2}}],
Line[{{1/2,Sqrt[3]/2},{1,0}}],
Line[{{1,0},{0,0}}]},
n]],
AspectRatio->Automatic,PlotRange->All]

doline[start_,finish_]:=
Module[{vec,normal},
vec=finish-start;
normal=Reverse[vec] {-1,1} Sqrt[3]/6;
{Line[{start,start + vec/3}],
Line[{start + vec/3,start + vec/2 + normal}],
Line[{start + vec/2 + normal, start + 2 vec/3}],
Line[{start + 2 vec/3, finish}]
}
];
```

The following cell generates a picture of the initial stage of the snowflake's construction.

```Input :=

Snowflake[0]
```
```Output =

-Graphics-
```

At the next stage of the snowflake's construction, we remove the middle one-third of each side and add two new segments having the same length as the part that was removed. (See the picture generated by the cell below).

```Input :=

Snowflake[1]
```
```Output =

-Graphics-
```

At each stage, we replace the middle-third of every segment in the previous stage by two new segments, creating a "bump" on the original segment. Evaluate the following cells to see the next four stages in the construction of the Koch Snowflake. Warning: Level 5 of the snowflake took me 3 minutes, 22 seconds to generate on an SGI Indy.

```Input :=

Snowflake[2]
```
```Output =

-Graphics-
```
```Input :=

Snowflake[3]

```
```Output =

-Graphics-
```
```Input :=

Snowflake[4]
```
```Output =

-Graphics-
```
```Input :=

Snowflake[5]
```
```Output =

-Graphics-
```