Arcs in hyperbolic geometry¶
AUTHORS:
Hartmut Monien (2011 - 08)
Three models of the hyperbolic plane are implemented: Upper Half Plane, Poincaré Disk, and Klein Disk, each with its different domain and metric tensor.
Upper half plane (UHP)
In this model, hyperbolic points are described by two coordinates, which we will represent by a complex number in the domain
with the corresponding metric tensor
Poincaré disk (PD)
In this model, hyperbolic points are described by two coordinates, which we will represent by a complex number within the unit circle, having therefore the following domain
with the corresponding metric tensor
Klein disk (KM)
In this model, the domain is again complex numbers within the unit circle as in the Poincaré disk model, but the corresponding metric tensor is different:
REFERENCES:
For additional models of the hyperbolic plane and its relationship see [CFKP1997]. For a more detailed explanation on hyperbolic arcs see [Sta1993].
- class sage.plot.hyperbolic_arc.HyperbolicArc(A, B, model, options)[source]¶
Bases:
HyperbolicArcCore
Primitive class for hyberbolic arc type.
See
hyperbolic_arc?
for information about plotting a hyperbolic arc in the complex plane.INPUT:
A
,B
– end points of the hyperbolic arcmodel
– the hyperbolic model used, which is one of the following:'UHP'
– upper half plane'PD'
– Poincaré disk'KM'
– Klein disk
- class sage.plot.hyperbolic_arc.HyperbolicArcCore(path, options)[source]¶
Bases:
BezierPath
Base class for Hyperbolic arcs and hyperbolic polygons in the hyperbolic plane.
The Upper Half Model, Poincaré Disk Model, and Klein Disk model are supported.
- sage.plot.hyperbolic_arc.hyperbolic_arc(a, b, model='UHP', alpha=1, fill=False, thickness=1, rgbcolor='blue', zorder=2, linestyle='solid', **options)[source]¶
Plot an arc from
a
tob
in hyperbolic plane.INPUT:
a
,b
– complex numbers connected by a hyperbolic arcmodel
– (default:'UHP'
) hyperbolic model used, which is one of the following:'UHP'
– upper half plane'PD'
– Poincaré disk'KM'
– Klein disk'HM'
– hyperboloid model
OPTIONS:
alpha
– (default: 1)thickness
– (default: 1)rgbcolor
– (default:'blue'
)linestyle
– (default:'solid'
) the style of the line, which is one of'dashed'
,'dotted'
,'solid'
,'dashdot'
, or'--'
,':'
,'-'
,'-.'
, respectively
EXAMPLES:
Show a hyperbolic arc from \(0\) to \(1\):
sage: hyperbolic_arc(0, 1) Graphics object consisting of 1 graphics primitive
>>> from sage.all import * >>> hyperbolic_arc(Integer(0), Integer(1)) Graphics object consisting of 1 graphics primitive
Show a hyperbolic arc from \(1/2\) to \(i\) with a red thick line:
sage: hyperbolic_arc(0.5, I,color='red', thickness=2) Graphics object consisting of 1 graphics primitive
>>> from sage.all import * >>> hyperbolic_arc(RealNumber('0.5'), I,color='red', thickness=Integer(2)) Graphics object consisting of 1 graphics primitive
Show a hyperbolic arc from \(1+i\) to \(1+2i\) with dashed line:
sage: hyperbolic_arc(1+I, 1+2*I, linestyle='dashed', color='green') Graphics object consisting of 1 graphics primitive
>>> from sage.all import * >>> hyperbolic_arc(Integer(1)+I, Integer(1)+Integer(2)*I, linestyle='dashed', color='green') Graphics object consisting of 1 graphics primitive
sage: hyperbolic_arc(-1+I, 1+2*I, linestyle='--', color='orange') Graphics object consisting of 1 graphics primitive
>>> from sage.all import * >>> hyperbolic_arc(-Integer(1)+I, Integer(1)+Integer(2)*I, linestyle='--', color='orange') Graphics object consisting of 1 graphics primitive
Show a hyperbolic arc from a \(1+i\) to infinity:
sage: hyperbolic_arc(1 + I, infinity, color='brown') Graphics object consisting of 1 graphics primitive
>>> from sage.all import * >>> hyperbolic_arc(Integer(1) + I, infinity, color='brown') Graphics object consisting of 1 graphics primitive
We can also plot hyperbolic arcs in other models.
We show a hyperbolic arc from \(i\) to \(-1\) in red, another hyperbolic arc from \(e^{i\pi/3}\) to \(0.6 \cdot e^{i 3\pi/4}\) with dashed style in green, and finally a hyperbolic arc from \(-0.5+0.5i\) to \(0.5-0.5i\) together with the disk frontier in the Poincaré disk model:
sage: z1 = CC(0,1) sage: z2 = CC(-1,0) sage: z3 = CC((cos(pi/3),sin(pi/3))) sage: z4 = CC((0.6*cos(3*pi/4),0.6*sin(3*pi/4))) sage: z5 = CC(-0.5,0.5) sage: z6 = CC(0.5,-0.5) sage: a1 = hyperbolic_arc(z1, z2, model='PD', color='red') sage: a2 = hyperbolic_arc(z3, z4, model='PD', color='green') sage: a3 = hyperbolic_arc(z5, z6, model='PD', linestyle='--') sage: a1 + a2 + a3 Graphics object consisting of 6 graphics primitives
>>> from sage.all import * >>> z1 = CC(Integer(0),Integer(1)) >>> z2 = CC(-Integer(1),Integer(0)) >>> z3 = CC((cos(pi/Integer(3)),sin(pi/Integer(3)))) >>> z4 = CC((RealNumber('0.6')*cos(Integer(3)*pi/Integer(4)),RealNumber('0.6')*sin(Integer(3)*pi/Integer(4)))) >>> z5 = CC(-RealNumber('0.5'),RealNumber('0.5')) >>> z6 = CC(RealNumber('0.5'),-RealNumber('0.5')) >>> a1 = hyperbolic_arc(z1, z2, model='PD', color='red') >>> a2 = hyperbolic_arc(z3, z4, model='PD', color='green') >>> a3 = hyperbolic_arc(z5, z6, model='PD', linestyle='--') >>> a1 + a2 + a3 Graphics object consisting of 6 graphics primitives
We show the arcs defined by the same endpoints in the Klein disk model (note that these are not the image of those arcs when changing between the models):
sage: a1 = hyperbolic_arc(z1, z2, model='KM', color='red') sage: a2 = hyperbolic_arc(z3, z4, model='KM', color='green') sage: a3 = hyperbolic_arc(z5, z6, model='KM', linestyle='--') sage: a1 + a2 + a3 Graphics object consisting of 6 graphics primitives
>>> from sage.all import * >>> a1 = hyperbolic_arc(z1, z2, model='KM', color='red') >>> a2 = hyperbolic_arc(z3, z4, model='KM', color='green') >>> a3 = hyperbolic_arc(z5, z6, model='KM', linestyle='--') >>> a1 + a2 + a3 Graphics object consisting of 6 graphics primitives
Show a hyperbolic arc from \((1,2,\sqrt(6))\) to \((-2,-3,\sqrt(14))\) in the hyperboloid model:
sage: a = (1,2,sqrt(6)) sage: b = (-2,-3,sqrt(14)) sage: hyperbolic_arc(a, b, model='HM') Graphics3d Object
>>> from sage.all import * >>> a = (Integer(1),Integer(2),sqrt(Integer(6))) >>> b = (-Integer(2),-Integer(3),sqrt(Integer(14))) >>> hyperbolic_arc(a, b, model='HM') Graphics3d Object