Reflections in Vertical Mirrors at an Angle

In recently re-publishing some older Sunday Times teasers, I came across one from 2010 that involved working out how many images could be seen in two vertical mirrors placed at an angle to each other (see it here).   This teaser generated an enormous amount of discussion when it was first published, with no agreement among puzzlers on what the answer should be (this discussion can be seen here).   And when I recently mentioned it on the Sunday Times teaser discussion site (see the comment section on this page), there was still a lack of agreement on what the answer should be.  In practice the teaser is not well specified so there is really no correct answer and it seems likely that it is more subtle than its author realised when he set it.

As a physicist, the problem appealed to me and I did a lot of analysis when it was first published in 2010. But when I recently started to re-publish these older teasers here, I found that I had mislaid my original material and the on-line copies on the Google discussion group had also been deleted. In consequence I have had to re-create my analysis which derives the paths of rays when an object and an observer are placed between two vertical mirrors arranged at an angle to each other.    I was not ‘into Python’ in 2010 but I am now enthusiastic about the ease with which I can do things with it. So here is my code for plotting the ray paths and images formed by angled mirrors.  It is not fully polished and may require some manual code changes to deal with some cases but it copes well with those cases that matter (the program is available here).

To run it you will require Python 3 with the matplotlib package installed. There are five input parameters as follows: $$r_0$$, the distance of the object from the mirror vertex, $$eta_0$$, the angle of the object from north in degrees, $$r_f$$ and $$eta_f$$, the same for the observer, and $$beta$$, the half angle between the mirrors in degrees.

Here is an example of the output for the official answer to the original teaser: