Patterns with pentagons

Arjen Markus (2 february 2004) Fooling around with an old idea about pentagons and the possibility to create a kind of tiling with them - like a honeycomb or plotting paper, I wrote the script below.

Probably I should give you some background on what it is doing, well, here it goes:

Imagine you have a segment of a straight line and you rotate that around one of its ends over an angle of 120 degrees. You do the same with the new segment and then again and again. If you do it in the right way, you will get a hexagon. You can create another copy of the hexagon and shift it so that one side coincides with the side of the first one.

You can go on with this process and eventually you end up with a honeycomb-like structure. So far, so good. You can in fact use angles of 90 degrees to get squares or of 60 degrees to get equilateral triangles.

But what if you used an angle of 108 degrees? You would get a pentagon, only that does not fill up the plane nicely. Or does it? (In some sense, it might: rotating a pentagon ten times around one of its corners and you end up with a threefold covering ... Well, that is what I want to find out. Yes, just a weird idea.)

Now, rather than draw the pentagons directly, I leave it to an iteration process that can be described mathematically like:

Create the set of line segments such that:

  • the line segment (0,0) to (1,0) belongs to the set
  • if line segment A (with one endpoint P) belongs to the set, then so does the line segment that results if you rotate A around P over an angle of 108 degrees

We start with the first line segment and rotate that nine times (after ten times we have the same line segment again). The first generation consists of ten line segments.

The second generation consists of these ten segments and the ten times nine that result from each. So, one hundred in total.

And so on.

The end result is a beautiful pattern (at least I find the design beautiful) that has all the makings (if the iteration runs to infinity) of a periodic tiling of the plane:

  • A translational symmetry in ten directions (can you prove that from the mathematical description?)
  • A ten-fold mirror symmetry
  • A ten-fold rotational symmetry

(unless I messed up my geometry ...)

I also did some experiments with the scale of the drawing and with heptagons and octagons as you can see in the code. But things get complicated rapidly.

 # pentagon.tcl --
 #    Is it possible to construct a multi-layer tesselation using
 #    regular pentagons?
 #
 proc addNewVertices { xcrd ycrd angle colour } {
    global list_vertices
    global no_per_generation
    global rot_angle

    for {set i 1} {$i < $no_per_generation} {incr i} {
       set newangle [expr {3.1415926-$angle+$i*$rot_angle}]
       set cosa [expr {cos($newangle)}]
       set sina [expr {sin($newangle)}]
       set newx [expr {$xcrd + $cosa}]
       set newy [expr {$ycrd + $sina}]

       lappend list_vertices $newx $newy $newangle
       .c create line [expr {300+100*$xcrd}] [expr {300+100*$ycrd}] \
                      [expr {300+100*$newx}] [expr {300+100*$newy}] \
                      -fill $colour
    }
 }

 canvas .c -width 600 -height 600 -bg white
 pack   .c -fill both

 # Pentagon
 set rot_angle         [expr {108.0*3.1415926/180.0}]
 set no_per_generation 10

 # Octagon
 #set rot_angle         [expr {135.0*3.1415926/180.0}]
 #set no_per_generation 8

 # Heptagon
 #set rot_angle         [expr {(180.0-360.0/7.0)*3.1415926/180.0}]
 #set no_per_generation 14

 set list_vertices {1.0 0.0 0.0}

 .c create line 300 300 400 300 -fill black

 for {set i 0} {$i < 3} {incr i} {
    set colour [lindex {black blue cyan green red magenta} $i]
    foreach {x y angle} $list_vertices {
       #puts "$i $x $y $angle"
       addNewVertices  $x $y $angle $colour
    }
 }