The L2Coordinates-various coordinates in the hyperbolic plane

(User's Guide for the package L2Coordinates.m version 1.1, 21.05.2004.)

Srdjan Vukmirovic

The commands in brief

First we breifly list the commands for the three kinds of coordinates, and command for drawing the coordinate net.

The supported commands of the package.

Installing the package

To use a package L2Coordinates.m you will need also a package L2Primitives.m. We highly recommend reading the userguide.nb for familiarizing with hyperbolic geometry and its basic objects supported by the package L2Primitives. Copy them both to any directory that can be found in the Mathematica path. A good choice  is C:\...\Wolfram Research\Mathematica\4.0\AddOns\ExtraPackages, in the directory where Mathematica files can be found.

This loads the package.

<< L2Coordinates.m

The important options for setting up the coordinate system are origin (Origin) and the direction of x-axes (XAxesPt). In the case of horocyclic cooordinates we rather choose the direction of y-axes (InfPoint). The InfPoint has to lie on the unit circle. The Origin and XAxesPt are given in KleinDisk model and has to lie inside of the unit circle (see userguide.nb for details). 
Here are the default values for those parameters.

Options[L2Plots]

We can choose them if we decide to change the default coordinate system. For instance:

SetOptions[L2Plots,Origin -> LPoint[{1/2, 1/6}]];
SetOptions[L2Plots,XAxesPt -> LPoint[{2/3, 0}]];

Now we see that Origin and XAxesPt have been changed.

Options[L2Plots]

Equidistant coordinates

Before explaining the coordinates lets draw the (-2, 2)x(-1,1) coordinate net  and a particular point with coordinates (1, 1/2) in PoincareDisk mode.

net  =  
        DrawNet[EquiPt,   {-2, 2,  20,  0.1}, {-1, 1,  40,  
            0.1},   Model -> 
            PoincareDisk];
point  =   LToGraphics[
          EquiPt[{1,  1/2}],   Model -> 
            PoincareDisk] ;
peq  =  
      Show[Graphics[ {net,  {PointSize[0.02],  point}}] , 
        Graphics[{Thickness[0.01], Circle[{0, 0}, 1]}],  
        AspectRatio -> Automatic]

The green lines are coordinate axes. Their intersection is the Origin specified as an Option of L2Plots. The point with coordinates (d,h) is obtained by measuring d (in this case 1) along the d-axes (starting form the Origin and going in the direction of XAxesPt) and then going orthogonaly h-units(1/2 in this case). Note that these coordinates does not commute: going first h units vertically and  then d units horizontaly would result in a different point. The coordinate lines are equidistants (h = const) colored red and lines (d= const) colored blue. Only the equidistant h=0 is a line.
The metric of the hyperbolic plane in this coordinates takes form (don't confuse with d denoting both the coordinate and the differential):

(ds^2) =  
      (dd^2) +  (ch^2) d (dh^2)

We can draw the same coordinate net in the HalfPlane and KleinDisk model of the hyperbolic plane (the are all isometric to each other).

net  =  
        DrawNet[EquiPt,   {-2, 2,  20,  0.1}, {-1, 1,  40,  
            0.1},   Model -> KleinDisk];
point  =   LToGraphics[
          EquiPt[{1,  1/2}],   Model -> 
            KleinDisk] ;
keq  =  
      Show[Graphics[ {net,  {PointSize[0.02],  point}}] , 
        Graphics[{Thickness[0.01], Circle[{0, 0}, 1]}],  
        AspectRatio -> Automatic]

net  =  
        DrawNet[EquiPt,   {-2, 2,  20,  0.1}, {-1, 1,  40,  
            0.1},   Model -> HalfPlane];
point  =   LToGraphics[
          EquiPt[{1,  1/2}],   Model -> 
            HalfPlane] ;
heq  =  
      Show[Graphics[ {net,  {PointSize[0.02],  point}}] , 
        Graphics[{Thickness[0.01], Line[{{-1, 0},  {2, 0}}]}],  
        AspectRatio -> Automatic]

GraphicsArray[{peq,  keq,  heq}] // Show

Horocyclic coordinates

Lets draw  the (-2, 2)x(-1,1) coordinate net  and a particular point in PoincareDisk mode.

net  =  
        DrawNet[HoroPt,   {-2, 2,  20,  0.05}, {-1, 1,  40,  
            0.05},   Model -> 
            PoincareDisk];
point = 
        LToGraphics[HoroPt[{1, 1/2}], 
          Model -> PoincareDisk];
hho  =  
      Show[Graphics[ {net,  {PointSize[0.02],  point}}] , 
        Graphics[{Thickness[0.01], Circle[{0, 0}, 1]}],  
        AspectRatio -> Automatic]

The green lines are coordinate axes. Their intersection is the Origin specified as an Option of L2Plots. The infinite point of both coordinate lines is specified by the InfPoint option of L2Plots. The point with coordinates (d,h) is obtained starting from the Origin and measuring d  along the d-axes (horocycle) and then going orthogonaly h-units along a line. These coordinates also does not commute. The coordinate lines are mutually congruent horocycles (h = const) colored red and lines (d= const) colored blue.
The metric of the hyperbolic plane in this coordinates takes form:

(ds^2) =  
      (dd^2) +  (e^(2  d)) (dh^2)

Similar pictures can be drawn in other models of the hyperbolic plane as with equidistant coordinates.

Polar  coordinates

These coordinates are counterpart of the polar coordinates in the Euclidean plane. They are defined on the region (0, ∞)x(0, 2π). Lets draw

net  =  
        DrawNet[CirclePt,   {0, 2.5,  20,  0.03}, {0, 3 Pi/2,  10,  
            Pi/80},   Model -> 
            PoincareDisk];
pci =  
      Show[Graphics[ net] , 
        Graphics[{Thickness[0.01], 
            Circle[{0, 0}, 1]}],   AspectRatio -> 
          Automatic]

The green line is the x-axis (phi =0). The coordinate lines are circles (r= const) and lines (phi = const).

Some applications

Example 1

In this example we combine functions from both L2Primitives and L2Coordinates package. As first, we create two points.

A  =  LPoint[{1/2,  1/2}];
B  =  LPoint[{-1/3,  1/4}];

height  =  3;

We would like to construc a Sacceri quadrilateral with the base AB and height equals 3. Using the coordinates we easily find the remaining vertices of the quadrilateral.

DD  =  
        EquiPt[{0,  height},  Origin -> A,  
          XAxesPt -> B];
CC  =  
        EquiPt[{LDistance[A, B],  height},  Origin -> A,  
          XAxesPt -> B];

sakeri = LLine[{A,  B,  CC,  DD, A}];

\(Having\ the\ quadrilateral, \ 
    we\ would\ like\ to\ "check"\ if\ it\ is\ symmetric\ with\ respect\ to\ the\ lines\ joining\ midpoints\ of\ the\ \ opposite\ \(\(sides\)\(.\)\)\)

EE  =  Mid[A,  B];
FF   =  Mid[CC,  DD];
GG  =  Mid[A,  DD];
HH  =  Mid[B,  CC];
sakeri1  =  L2Reflection[LLine[{EE, FF}]][
          sakeri];
sakeri2  =  L2Reflection[LLine[{GG, HH}]][
          sakeri];

labels  =  {Text["A",  A[[1]],  {7,  3}],  
          Text["B",  B[[1]],  {0,  6}],  
          Text["C",  CC[[1]],  {-1,  -1}],  
          Text["D",  DD[[1]],  {0,  -3}]};

We draw the picture.

Show[
      Graphics[LToGraphics[{sakeri,  sakeri1,  sakeri2,  EE,  FF,  GG,  
            HH},  Model -> PoincareDisk]] ,  Graphics[labels], 
      Graphics[{Thickness[0.01], Circle[{0, 0}, 1]}], 
 
      AspectRatio -> Automatic]

We see only two, rather than three quadrilaterals. That is since sakeri and sakeri1 coincide what means that the quadrilateral ABCD is symmetric with respect to line joining the midpoints of AB and CD. That is not the case with the sakeri2.

Example 2

Although it doesn't make much sense, we can choose our favourite coordinates, and draw the graph of the function Sin[6 x]. You will notice that there is some hidden simmetry in the curve, although that symmetry is not an Euclidean one.

net  =  
        DrawNet[EquiPt,   {-Pi, Pi,  20,  0.2}, {-1, 1,  35,  
            0.2},   Model -> 
            PoincareDisk];
sin  =  
        Graphics[{Thickness[0.009], 
            Line[Table[LToGraphics[EquiPt[{t,  Sin[6 t]}],  
                    Model -> 
                      PoincareDisk][[1]],  {t,  -Pi,  Pi,  
                  1/40}]]}];
Show[Graphics[ net],  sin , 
        Graphics[{Thickness[0.01], Circle[{0, 0}, 1]}],  
        AspectRatio -> Automatic];

Finally, using several Sin-like graphs we  get an interesting pictures. It has some unusuall symmetries (actually, it has both hyperbolic translational symmetries, and a miror symmetry). The sky is the limit :)

msin  =  
        Graphics[{Thickness[0.009], 
            Line[Table[LToGraphics[EquiPt[{t,  -Sin[6 t]}],  
                    Model -> 
                      PoincareDisk][[1]],  {t,  -Pi,  Pi,  
                  1/40}]]}];

curve  =  
        Graphics[{Thickness[0.009] ,  RGBColor[1, 0.2, 1], 
            Line[Table[LToGraphics[EquiPt[{t,  Sin[6 t] + 0.5}],  
                    Model -> 
                      PoincareDisk][[1]],  {t, -Pi ,  Pi,  
                  1/40}]]}];

mcurve  =   Graphics[{Thickness[0.009],  RGBColor[1, 0.2, 1], 
            Line[Table[LToGraphics[EquiPt[{t,  -Sin[ 6 t] - 0.5}],  
                    Model -> 
                      PoincareDisk][[1]],  {t,  -Pi,  Pi,  
                  1/40}]]}];

Show[sin,  msin,  curve,  mcurve,  
        AspectRatio -> Automatic];