Let D denote the Poincaré unit disc, D={z ∈C:|z|<1} equipped with the hyperbolic metric d(z, w) = log ((|1 - z bar(w)| + |z - w| /|1 - z bar(w)| - |z - w|)).
We mimic the existing functionality for working with the upper half-plane (see Chapter CONGRUENCE SUBGROUPS OF PSL2(R)) to compute in a similar way with the geometry of the unit disc, including computation of angles, intersections, areas, and so on.
Center: RngElt Default: (9/10)i
Precision: RngElt Default: 0
The hyperbolic unit disc, mapped conformally to the upper half-plane by mapping 0 in D to Center, with given Precision.
Coerces x into D, if possible.
Returns true if and only if x=y.
Returns a .x.
Returns x + y.
Returns x - y.
Returns (1/a).x.
Returns true (and the exact value of z) if and only if z is exact.
Returns the exact value of z; if it does not exist, returns an error.
Precision: RngIntElt Default: 0
Returns the complex value z, with given precision.
Precision: RngIntElt Default: 0
Returns the imaginary part of z, with given precision.
Precision: RngIntElt Default: 0
Returns the real part of z, with given precision.
Precision: RngIntElt Default: 0
Returns the argument of z, with given precision.
Precision: RngIntElt Default: 0
Returns the absolute value of z, with given precision.
> D := UnitDisc(); > D; Hyperbolic unit disc > CC<I> := ComplexField(); > w := D ! ((1+I)/2); > w; 0.500000000000000000000000000000 + 0.500000000000000000000000000000*I > Re(w), Abs(w); 0.500000000000000000000000000000 0.707106781186547524400844362105
Note that since D does not form a ring, when binary operations are performed, we return elements according to the base ring in which they belong; if desired, they can be coerced back into D.
> z := D ! 0; > z; 0 > IsExact(z); true 0 > ComplexValue(z : Precision := 100); 0.00000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000 > 2*z; 0 > Type($1); FldRatElt > D!(z+w) eq w; true
Precision: RngIntElt Default: 0
Returns the hyperbolic distance between z and w.
Precision: RngIntElt Default: 0
Returns the center and radius of the geodesic containing z and w, with given precision.
Precision: RngIntElt Default: 0
Returns the angle of the tangent at x of the geodescic from x to y, with given precision.
Precision: RngIntElt Default: 0
Given two sequences e1 = [z1, z2] and e2 = [z1, z3], returns the angle between the geodesics at z1.
Precision: RngIntElt Default: 0
The volume of the convex region specified the sequence of elements of the unit disc. The elements must be specified in counterclockwise order by their arguments. The volume is normalized "arithmetic" volume, so the "usual" volume is divided by 2π; this gives an ideal triangle volume 1/2.
> D := UnitDisc(); > CC<I> := ComplexField(); > z0 := D!0; > z1 := D!(1/2*I); > z2 := D!(1/2); > Distance(z0,z1); 1.09861228866810969139524523692 > Geodesic(z0,z1); Infty 0.000000000000000000000000000000 > Geodesic(z1,z2); 1.25000000000000000000000000000 + 1.25000000000000000000000000000*I 1.45773797371132511771853821939 > TangentAngle(z0,z1); 1.57079632679489661923132169164 > TangentAngle(z1,z2); -1.03037682652431246378774332703 > Angle([z1,z2],[z1,z0]); 2.60117315331920908301906501867 > ArithmeticVolume([D | 1/2+1/2*I, -1/2+1/2*I, -1/2-1/2*I, 1/2-1/2*I]); 0.590334470601733096701604304899
Returns T(x), using the identification of the unit disc with the upper half-plane.
Returns the element in the upper half-plane which maps to 0 in D.
Maps z in a unit disc to Hh.
Maps z in an upper half-plane to D.
Returns the matrix representation of g acting on the unit disc D.
Returns the fixed points of g acting on D.
Returns the center and radius of the set of points in the upper half-plane H where g acts as a Euclidean isometry.
Returns the center and radius of the set of points in the unit disc D where g acts as a Euclidean isometry.
Returns the intersection in the unit disc of the two geodesics x1, x2, where x and y are specified by their end points. If more than one intersection exists, returns a sequence.
Computes the intersection of the geodesic x with the boundary of the unit disc.
In this example, we illustrate the use of the structural operations on the unit disc. We begin by declaring a Fuchsian group over the totally real subfield F=Q(ζ9)^ + of Q(ζ9).
> K<z> := CyclotomicField(9); > F := sub<K | z+1/z >; > b := F! (z+1/z); > A<alpha,beta> := QuaternionAlgebra<F | -3, -b>; > G := FuchsianGroup(A); > O := BaseRing(G); > A<alpha,beta> := Algebra(O);
Next, we compute the fixed point of the element g=(1 + α)/2.
> g := G!((1+alpha)/2); > H := UpperHalfPlane(); > FixedPoints(g, H); [ root(-1) ] > Matrix(g); [0.5000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 0.866025403784438646763723170752936183471402626905 1903140279034897259665084544000185405730933786242878] [-0.866025403784438646763723170752936183471402626905190314027903489725966508454 4000185405730933786242878 0.50000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000] > g*H.1; root(-1);
The fixed point is at z=i. Next, we compute the isometric circle C(g) of g, C(g)={z ∈C: |g(z)|=|z| }. (See also the next section on fundamental domains.)
> cH, rH := IsometricCircle(g); > cH; 0.57735026918962576450914878050195745564760175127012687601860232648397767230293 33456937153955857495252 > rH; 1.15470053837925152901829756100391491129520350254025375203720465296795534460586 6691387430791171499050
The circle C(g) has radius rH=1.154 ... and center cH=0.577 ... . We verify that g acts by a Euclidean isometry at the point cH + rH i ∈C(g).
> CC<I> := ComplexField(); > Abs(Matrix(g)[2,1]*(cH+rH*I)+Matrix(g)[2,2]); 1.00000000000000000000000000000
We now repeat these same steps, with g acting on the unit disc D.
> D := UnitDisc(: Center := 9/10*H.1); > Matrix(g, D); [0.5000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 + 0.8708366560276855281346327439238178790538869671 932875211895468244836121536336192488985662869809493679*$.1 -0.091413792621690746047281890246448583363214116792146568962386184205317861 46329352761052320334348050449*$.1] [0.0914137926216907460472818902464485833632141167921465689623861842053178614632 9352761052320334348050449*$.1 0.5000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000 - 0.8708366560276855281346327439238178790538869671932875211895468244836121536 336192488985662869809493679*$.1] > cD, rD := IsometricCircle(g, D); > Abs(Matrix(g, D)[2,1]*PlaneToDisc(D, H!(cH+rH*I))+Matrix(g, D)[2,2]); 1.00000000000000000000000000000