This program lives on two web pages:

WARNING: this program is currently very slow for large index, so proceed carefully for N larger than 20 or so (depending on your computer). Sometimes updating the screen does not work properly, and I don't yet know why. If you change group type, and it redraws the new fundamental domain without wiping out the old one, try clicking the "0" button to get the picture to redraw properly.

NOTE: This page is not yet finished, and the program is still under development. I have only really tested this program with one browser on one computer, so I would be intersted to know how it works on other computers. Any comments are very much appreciated. Email me at [email protected]

Expand Rectangle: You can click on the screen and drag the mouse to form a rectangle. If you click on 'expand rectangle' the scale changes so the height of the rectangle becomes the height of the screen. The center of the rectangle moves the the center of the screen (in vertical direction only).

Changing N - you can type in N, or you can press the ">" and "<" buttons to increase N in steps.

Edit Mode: In this mode the triangles can be moved to give a different fundamental domain for the same group, by clicking on the yellow circles on the boundary.

Links: These show how the boundary is linked up

find matrix: You can find what matrix a triangle corresponds to by clicking on it; the colour changes, and the matrix will be printed in the left lower corner. Click again to change colour back.

move/copyIf move is selected, when the matrix is applied (eg, T, R, etc) the triangle is moved by this matrix. If copy is selected, a copy is made, which is a translate by the applied matrix.

Move to: this moves the origin so that the triangle just drawn is in the middle of the screen

Scale to: If you click on this, in addition to moving, it also scales, so the triangle just drawn is in the middle of the screen, _and_ at a reasonable size so you can see it.

The triangles drawn by this program are Fundamental domains for
SL_{2}(Z).
These triangles are used to
construct the Fundamental domains for other subgroups of SL_{2}(Z).
The subgroups for which the fundamental domain is computed
currently are the following:

Since a few people asked, I've now written a longer description of how the algorithm works. This is avaliable in ps and dvi format: ps file, ps.gz file, dvi and images in tar.gz file.

If you want to look at the code, please download the following 8 java class files, plus the README file, and a copy of the GNU GPL:

Controls for input (Main) | FunDomain.java |

Basic classes: | ModN.java |

ConFrac.java | |

IntMat.java | |

ConjClassRep.java | |

For drawing triangles: | HypTriangle.java |

ArcSection.java | |

Computation of the coset representatives: | RepList.java |

README (Instructions/Notes) | |

GNU GPL | |

fundomain.tar.gz (everything) |

I have also included the compiled classes of this program, in the directory here. The program seems to work faster when compiled under java 1.1 than java 1.2, though both will work.