(* :T\[IAcute]tulo: Hyperbol *)

(* :Autores: Domingo G\[AAcute]mez, Miguel Pasadas, Rafael P\[EAcute]rez,
             Ceferino Ruiz  *)

(* :Resumen:
Este paquete provee a Mathematica de funciones para el c\[AAcute]lculo de las
ecuaciones y gr\[AAcute]ficas de los distintos movimientos en el plano 
hiperb\[OAcute]lico *)

(* :Nota: El package debe almacenarse en la carpete de packages 
          Geometry *)

(* :Contexto: Geometry`Hyperbol` *)

(* :Package Version: 1.0 *)

(* :Copyright: Copyright 2001, D. G\[AAcute]mez, M. Pasadas, R. 
P\[EAcute]rez, C. Ruiz. *)

(* :Keywords: hyperbolic plane, isometry, orbit, tessellation, polygonal 
group, NEC group, constructive problem *)

(* :Fuente: Tesis Doctoral de Domingo G\[AAcute]mez*)

(* :Mathematica Version: 4.0 *)

BeginPackage["Geometry`Hyperbol`"]

(** Two dimensions **)

Angulo::usage = 
"Angulo[{v1,v2},{w1,w2}] da el \[AAcute]ngulo medido desde {v1,v2} hasta 
{w1,w2} medido en el sentido contrario a las agujas del reloj"

Cayley::usage =
"Cayley[{x,y}] da las coordenadas del transformado por la aplicaci\[OAcute]n 
de Cayley del punto {x,y} de H2 en D2"

GrHcirc::usage =
"GrHcirc[{a,b},dis] genera como elemento gr\[AAcute]ficos la circunferencia 
de centro {a,b} y radio dis en H2. Para visualizarla debe usarse la 
estructura Show[GrHcirc[{a,b},dis],DisplayFunction->$DisplayFunction]"

GrHDcirc::usage =
"GrHDcirc[{a,b},dis] genera como elemento gr\[AAcute]ficos la circunferencia 
de centro {a,b} y radio dis en D2. Para visualizarla debe usarse la 
estructura Show[GrHDcirc[{a,b},dis],DisplayFunction->$DisplayFunction]"

GrHDhiperciclo::usage = 
"GrHDhiperciclo[{a,b},{c,d},{e,f}] genera como elemento gr\[AAcute]fico el \
hiperciclo
que pasa por los puntos {a,b} y {c,d} de la recta del infinito y el punto 
{e,f} en D2. Para visualizarlo debe usarse la estructura 
Show[GrHDhiperciclo[{a,b},{c,d},{e,f}],DisplayFunction->$DisplayFunction]"

GrHDhorociclo1::usage = 
"GrHDhorociclo1[{a,b},{p,q}]  genera como elemento gr\[AAcute]fico el 
horociclo que pasa por el punto {a,b} y el punto de la recta del infinito 
{p,q} en D2. Para visualizarlo debe usarse la estructura 
Show[GrHDhorociclo1[{a,b},{p,q}],DisplayFunction->$DisplayFunction]"


GrHDhorociclo2::usage =
"GrHDhorociclo2[{a,b},{c,d}] genera como elemento gr\[AAcute]fico los dos 
horociclos que pasan por los puntos {a,b} y {c,d} de D2. Para visualizarlos 
debe usarse la estructura 
Show[GrHDhorociclo2[{a,b},{c,d}],DisplayFunction->$DisplayFunction]  "


GrHDmediatriz::usage =
"GrHDmediatriz[{a,b},{c,d}] genera como elemento gr\[AAcute]fico la mediatriz
del segmento que une los puntos {a,b} y {c,d} de D2. Para visualizarla debe 
usarse la estructura 
Show[GrHmediatriz[{a,b},{c,d}],DisplayFunction->$DisplayFunction]"

GrHDperp::usage =
"GrHperp[{a,b},{c,d}] genera como elemento gr\[AAcute]fico la perpendicular a
la recta que une los puntos {a,b} y {c,d} pasando por el punto {a,b} en D2. 
Para visualizarla debe usarse la estructura 
Show[GrHDperp[{a,b},{c,d}],DisplayFunction->$DisplayFunction]"

GrHDrecta::usage = 
"GrHDrecta[{a,b},{c,d}] genera como elemento gr\[AAcute]fico la recta en D2 
que une los puntos {a,b} y {c,d}. Para visualizarla debe usarse la estructura
Show[GrHDrecta[{a,b},{c,d}],DisplayFunction->$DisplayFunction]"

GrHDsegmento::usage = 
"GrHDsegmento[{a,b},{c,d}] genera como elemento gr\[AAcute]fico el segmento 
en D2 que une los puntos {a,b} y {c,d}. Para visualizarla debe usarse la 
estructura Show[GrHDsegmento[{a,b},{c,d}],DisplayFunction->$DisplayFunction]"

GrHDtraslacion::usage =
"GrHDtraslacion[{a,b},{c,d}] genera como elemento gr\[AAcute]fico  dos rectas
tales que la composici\[OAcute]n de las reflexiones respecto de las mismas 
produce la traslaci\[OAcute]n de {a,b} a {c,d} en D2. Para visualizarlas debe
usarse la estructura 
Show[GrHDtraslacion[{a,b},{c,d}],DisplayFunction->$DisplayFunction]"

GrHiperciclo::usage = 
"GrHiperciclo[{a,b,{c,d}] genera como elemento gr\[AAcute]fico el hiperciclo
que pasa por los puntos de abscisas a y b de la recta del infinito y el punto \

{c,d} en H2. Si b es Infinity el hiperciclo es una recta eucl\[IAcute]dea. \
Para 
visualizarlo debe usarse la estructura 
Show[GrHiperciclo[a,b,{c,d}],DisplayFunction->$DisplayFunction]"

GrHmediatriz::usage =
"GrHmediatriz[{a,b},{c,d}] genera como elemento gr\[AAcute]fico la mediatriz 
del segmento que une los puntos {a,b} y {c,d} de H2. Para visualizarla debe 
usarse la estructura 
Show[GrHmediatriz[{a,b},{c,d}],DisplayFunction->$DisplayFunction]"

GrHorociclo1::usage = 
"GrHorociclo1[{a,b},p]  genera como elemento gr\[AAcute]fico el horociclo que
pasa por el punto {a,b} y el punto de la recta del infinito de abscisa p en 
H2. Para visualizarlo debe usarse la estructura 
Show[GrHorociclo1[{a,b},p],DisplayFunction->$DisplayFunction]"

GrHorociclo2::usage = 
"GrHorociclo2[{a,b},{c,d}] genera como elemento gr\[AAcute]fico los dos 
horociclos que pasan por los puntos {a,b} y {c,d} de H2. Para visualizarlos 
debe usarse la estructura 
Show[GrHorociclo2[{a,b},{c,d}],DisplayFunction->$DisplayFunction]  "

GrHperp::usage =
"GrHperp[{a,b},{c,d}] genera como elemento gr\[AAcute]fico la perpendicular a
la recta que une los puntos {a,b} y {c,d} pasando por el punto {a,b} en H2. 
Para visualizarla debe usarse la estructura 
Show[GrHperp[{a,b},{c,d}],DisplayFunction->$DisplayFunction]"

GrHrecta::usage = 
"GrHrecta[{a,b},{c,d}] genera como elemento gr\[AAcute]fico la recta en H2 
que une los puntos {a,b} y {c,d}. Para visualizarla debe usarse la estructura
Show[GrHrecta[{a,b},{c,d}],DisplayFunction->$DisplayFunction]"

GrHsegmento::usage = 
"GrHsegmento[{a,b},{c,d}] genera como elemento gr\[AAcute]fico el segmento en
H2 que une los puntos {a,b} y {c,d}. Para visualizarla debe usarse la 
estructura Show[GrHsegmento[{a,b},{c,d}],DisplayFunction->$DisplayFunction]"

GrHtraslacion::usage =
"GrHtraslacion[{a,b},{c,d}] genera como elemento gr\[AAcute]fico  dos rectas 
tales que la composici\[OAcute]n de las reflexiones respecto de las mismas 
produce la traslaci\[OAcute]n de {a,b} a {c,d} en H2. Para visualizarlas debe
usarse la estructura 
Show[GrHtraslacion[{a,b},{c,d}],DisplayFunction->$DisplayFunction]"

Hcirc::usage = 
"Hcirc[{a,b},dis] da la lista formada por el centro eucl\[IAcute]deo, radio 
eucl\[IAcute]deo y ecuaci\[OAcute]n de la circunferencia de centro {a,b} y 
radio dis en H2."

HDcirc::usage = 
"HDcirc[{a,b},dis] da la lista formada por el centro eucl\[IAcute]deo, radio 
eucl\[IAcute]deo y ecuaci\[OAcute]n de la circunferencia de centro {a,b} y 
radio dis en D2."

HDdist::usage = 
"HDdist[{a,b},{c,d}] da la distancia entre los puntos {a,b} y {c,d} en D2. 
El signo de esta distancia indica el el sentido para llevar {a,b} sobre \
{c,d}"

HDgiro::usage = 
"HDgiro[{a,b},al,{c,d}] da las coordenadas del punto obtenido mediante un 
giro de centro {a,b} y \[AAcute]ngulo al radianes del punto {c,d} de D2"

Hdist::usage = 
"Hdist[{a,b},{c,d}] da la distancia entre los puntos {a,b} y {c,d} de H2. El 
signo de esta distancia indica el el sentido para llevar {a,b} sobre {c,d}"

HDhiperciclo::usage = 
"HDhiperciclo[{a,b},{c,d},{e,f}] da el centro, el radio y los \[AAcute]ngulos \
del 
arco de circunferencia correspondiente al hiperciclo que pasa por los
puntos {a,b} y {c,d} de la recta del infinito y el punto {e,f} de D2."

HDhorociclo1::usage = 
"HDhorociclo1[{a,b},{p,q}] da la lista formada por el centro, el radio y la 
ecuaci\[OAcute]n de la circunferencia eucl\[IAcute]dea correspondiente al 
horociclo que pasa por el punto {a,b} y el punto de la recta del infinito 
{p,q} en D2. "

HDhorociclo2::usage =
"HDhorociclo2[{a,b},{c,d}] da la lista formada por el centro, 
el radio y la ecuaci\[OAcute]n de las circunferencia eucl\[IAcute]dea 
correspondientes a los dos horociclo que pasan por los puntos
{a,b} y {c,d} en D2. "

HDmediatriz::usage =
"Hmediatriz[{a,b},{c,d}] da la ecuaci\[OAcute]n de la mediatriz del segmento 
que une los puntos {a,b} y {c,d} de D2"

HDperp::usage =
"HDperp[{a,b},{c,d}] da dos puntos de la recta perpendicular 
a la recta que une {a,b} y {c,d} pasando por el
punto {a,b} en D2."

HDperpComun::usage =
"HDperpComun[{a,b},{c,d},{e,f},{g,h}] da dos puntos de la recta 
perpendicular com\[UAcute]n a las rectas que unen los puntos {a,b}, {c,d} 
y {e,f},{g,h}, respectivamente, en D2."


HDrecta::usage =
"HDrecta[{a,b},{c,d}] da la ecuaci\[OAcute]n de la recta de D2 que une
los puntos {a,b} y {c,d}"

HDreflexion::usage = 
"HDreflexion[{e,f},{a,b},{c,d}] da las coordenadas del punto 
reflejado de {e,f} repecto de la recta que une los puntos 
{a,b} y {c,d} de D2"

HDtraslacion::usage =
"HDtraslacion[{a,b},{c,d}] da las ecuaciones de las rectas tales 
la composici\[OAcute]n de las reflexiones respecto de las mismas produce
la traslaci\[OAcute]n que transforma {a,b} en {c,d} en D2"

HDtrasrec::usage =
"HDtrasrec[{a,b},{c,d},dis] da las coordenadas del trasladado
del punto {a,b} una distancia igual a dis sobre la recta que 
une los puntos {a,b} y {c,d} en D2. El signo de dis indica el 
sentido de traslaci\[OAcute]n sobre la recta"

Hgiro::usage = 
"Hgiro[{a,b},al,{c,d}] da las coordenadas del punto obtenido 
mediante un giro de centro {a,b} y \[AAcute]ngulo al radianes del punto
{c,d} de H2"

Hiperciclo::usage =
"Hiperciclo[a,b,{c,d}] da el centro, el radio y los \[AAcute]ngulos del 
arco de circunferencia correspondiente al hiperciclo que pasa por los
puntos de abscisas a y b de la recta del infinito y el punto {e,f} de D2.
 Si b es Infinity da como centro, radio y \[AAcute]ngulos, valores nulos."

Hmediatriz::usage =
"Hmediatriz[{a,b},{c,d}] da la ecuaci\[OAcute]n de la mediatriz del 
segmento que une los puntos {a,b} y {c,d} de H2"

Horociclo1::usage = 
"Horociclo1[{a,b},p] da el radio y la ecuaci\[OAcute]n eucl\[IAcute]dea del 
horociclo que pasa por el punto {a,b} y el punto de la recta del 
infinito de abscisa p en H2. Si p=Inifinity entonces el radio es 
igual a cero."

Horociclo2::usage =
"Horociclo2[{a,b},{c,d}] da el centro, el radio y la ecuaci\[OAcute]n
eucl\[IAcute]dea de los dos horociclos que pasan por {a,b} y {c,d} en H2. 
Si uno de ellos es una recta el radio es 0."

Hperp::usage =
"Hperp[{a,b},{c,d}] da la abscisa del centro y el radio de la recta 
perpendicular a la recta que une {a,b} y {c,d} pasando por el
punto {a,b} en H2. Si el radio es 0 se entender\[AAcute] la recta vertical 
que pasa por la abscisa del centro dada."

HperpComun::usage =
"HperpComun[{a,b},{c,d},{e,f},{g,h}] da la abscisa del centro y el 
radio de la recta perpendicular com\[UAcute]n a las rectas que unen los 
puntos {a,b}, {c,d} y {e,f},{g,h}, respectivamente, en H2"

Hrecta::usage = 
"Hrecta[{a,b},{c,d}] da la ecuaci\[OAcute]n de la recta de H2 que une
los puntos {a,b} y {c,d}"

Hreflexion::usage = 
"Hreflexion[{e,f},{a,b},{c,d}] da las coordenadas del punto 
reflejado de {e,f} repecto de la recta que une los puntos 
{a,b} y {c,d} de H2"

Htraslacion::usage =
"Htraslacion[{a,b},{c,d}] da las ecuaciones de las rectas tales 
la composici\[OAcute]n de las reflexiones respecto de las mismas produce
la traslaci\[OAcute]n que transforma {a,b} en {c,d} en H2"

Htrasrec::usage =
"Htrasrec[{a,b},{c,d},dis] da las coordenadas del trasladado
del punto {a,b} una distancia igual a dis sobre la recta que 
une los puntos {a,b} y {c,d} en H2. El signo de dis indica el 
sentido de traslaci\[OAcute]n sobre la recta"

InCayley::usage = 
"InCayley[{a,b}] da las coordenadas del transformado por la 
aplicaci\[OAcute]n de Cayley del punto {a,b} de D2 en H2"




Begin["`Private`"]

Angulo[{v1_, v2_}, {w1_, w2_}] := 
    Module[{al, be}, 
      If[v1 == 0. , 
        If[v2 > 0, alsegmento = N[Pi/2], al = N[-Pi/2]], 
        al = N[Abs[ArcTan[v2/v1]]]]; 
      Which[v1 < 0.  && v2 > 0. , al = N[Pi/2 + al], 
        v1 < 0.  && v2 < 0. , al = N[Pi + al], v1 > 0.  && v2 < 0. , 
        al = N[3Pi/2 + al]]; 
      If[w1 == 0. , If[w2 > 0, be = N[Pi/2], be = N[-Pi/2]], 
        be = N[Abs[ArcTan[w2/w1]]]]; 
      Which[w1 < 0.  && w2 > 0. , be = N[Pi/2 + be], 
        w1 < 0.  && w2 < 0. , be = N[Pi + be], w1 > 0.  && w2 < 0. , 
        be = N[3Pi/2 + be]]; be - al]
        
Cayley[{x_,y_}] := {(x^2+y^2-1)/(x^2+(y+1)^2),-2x/(x^2+(y+1)^2)}

GrHcirc[{a_,b_},dis_]:=
	Show[Graphics[{Circle[Hcirc[{a,b},Abs[dis]][[1]],
		Hcirc[{a,b},Abs[dis]][[2]]]}],AspectRatio->Automatic,
		DisplayFunction->Identity]

GrHDcirc[{a_,b_},dis_]:=
	Show[Graphics[{Circle[
          HDcirc[{a,b},dis][[1]],HDcirc[{a,b},dis][[2]]]}],
          AspectRatio->Automatic,DisplayFunction->Identity]

GrHDhiperciclo[{a_,b_},{c_,d_},{e_,f_}]:=Module[{p,pp},
     p=HDhiperciclo[{a,b},{c,d},{e,f}];If[p[[2]]!=0,
     pp=Circle[p[[1]],p[[2]],{p[[3]],p[[4]]}],pp=Line[{{a,b},{c,d}}]];
     Show[Graphics[pp],DisplayFunction->Identity]]

GrHDhorociclo1[{a_,b_},{p_,q_}]:=Show[Graphics[{Circle[{0,0},1],
     Circle[HDhorociclo1[{a,b},{p,q}][[1]],
            HDhorociclo1[{a,b},{p,q}][[2]]]}],
     DisplayFunction->Identity];

GrHDhorociclo2[{a_,b_},{c_,d_}]:=
	Show[Graphics[{Circle[{0,0},1],
          Circle[HDhorociclo2[{a,b},{c,d}][[1,1]],
                HDhorociclo2[{a,b},{c,d}][[1,2]]],
			Circle[HDhorociclo2[{a,b},{c,d}][[2,1]],
				   HDhorociclo2[{a,b},{c,d}][[2,2]]]}],
		DisplayFunction->Identity];

GrHDmediatriz[{ad_,bd_},{cd_,dd_}]:=
	Module[{a,b,c,d,g},{a,b}=InCayley[{ad,bd}];
		{c,d}=InCayley[{cd,dd}];
		Which[b==d,
			g=ParametricPlot[Evaluate[Cayley[{(a+c)/2,t}]],
					{t,0.00000001,300},DisplayFunction->Identity],
			a==c,
			g=ParametricPlot[Evaluate[Cayley[{Sqrt[(b d)] Cos[t]+a,
								Sqrt[(b d)] Sin[t]}]],{t,0,Pi},
					DisplayFunction->Identity],True,
			g=ParametricPlot[Evaluate[
			  Cayley[{Sqrt[((b d (a^2+b^2-2 a c+c^2-2 b d+d^2))/(-b+
			                 d)^2)] Cos[t]-(b c-a d)/(-b+d),
					   Sqrt[((b d (a^2+b^2-2 a c+c^2-2 b d+d^2))/(-b+
					         d)^2)] Sin[t]}]],
					{t,0,Pi},DisplayFunction->Identity]];
		Show[g,AspectRatio->Automatic]]
		
GrHDperp[{a_,b_},{c_,d_}]:=Module[{k,r},{k,r}=Hperp[InCayley[{a,b}],
        InCayley[{c,d}]];
		Show[GrHDrecta[{a,b},Cayley[{k+r,0}]],DisplayFunction->Identity]];

(*GrHDrecta[{ad_,bd_},{cd_,dd_}]:=Module[{a,b,c,d,r,p},
		If[{cd,dd}!={1.,0.},{a,b}=InCayley[{ad,bd}];{c,d}=InCayley[{cd,dd}],
		   {a,b}=InCayley[{ad,bd}];{c,d}={0.9999999999,0.}];
		If[a!=c,r=Sqrt[b^2+(a+(a^2+b^2-c^2-d^2)/(2 (-a+c)))^2];
			p=ParametricPlot[Evaluate[Cayley[{r Cos[t]-
				    (a^2+b^2-c^2-d^2)/(2 (-a+c)),r Sin[t]}]],{t,0,\[Pi]},
					DisplayFunction->Identity],
			p=ParametricPlot[Evaluate[Cayley[{a,t}]],
					{t,0.0000000001,300},DisplayFunction->Identity]];p]*)
					
(*GrHDrecta[{ad_,bd_},{cd_,dd_}]:=
	Module[{a,b,c,d,p1,p2,p3,p4,al,be,cen,r,rdis,cendis,dif,e,f,g,alme,pme},
	p1={ad,bd};p2={cd,dd};
	If[p2=={1.,0.},p1={cd,dd};p2={ad,bd}];
	If[p1=={1.,0.},{c,d}=InCayley[p2];{a,b}={c,d+1},{a,b}=InCayley[p1];
	   {c,d}=InCayley[p2]];
    p3={0.,0.};
    If[(p2[[1]]-p1[[1]]) (p3[[2]]-p1[[2]])== 
	   (p2[[2]]-p1[[2]]) (p3[[1]]-p1[[1]]),
	   p4=Solve[{(x-p1[[1]]) (p2[[2]]-p1[[2]]) ==
	   (y-p1[[2]]) (p2[[1]]-p1[[1]]), x^2+y^2==1},{x,y}];
	   p1={x,y}/.p4[[1]];p2={x,y}/.p4[[2]];
	   p=Line[{p1,p2}],
	   If[a!=c,
	        cen={-(a^2+b^2-c^2-d^2)/(2(-a+c)),0};
	        r=Sqrt[(b^2+(a+(a^2+b^2-c^2-d^2)/(2 (-a+c)))^2)];
	        p3=Cayley[cen+{r,0.}];p4=Cayley[cen-{r,0.}],
	        p3=Cayley[{a,b+1}];p4=Cayley[{a,b+2}]
	     ];If[p3==p1 || p3==p2,pas=p3;p3=p4;p4=pas];
     {e,f,g}=LinearSolve[{{p1[[1]],p1[[2]],1.},
     {p2[[1]],p2[[2]],1.},{p3[[1]],p3[[2]],1.}},
     {-p1[[1]]^2-p1[[2]]^2,-p2[[1]]^2-p2[[2]]^2,
	 -p3[[1]]^2-p3[[2]]^2}];
	 cendis={-e/2,-f/2};rdis=Sqrt[(e/2)^2+(f/2)^2-g];
	 dif=p3-cendis;
	 al=ArcTan[dif[[2]]/dif[[1]]];
	 If[dif[[1]]<0,al=al+Pi];
	 dif=p4-cendis;
	 be=ArcTan[dif[[2]]/dif[[1]]];
	 If[dif[[1]]<0,be=be+Pi];
	 If[al>be,al=al-2Pi];
 alme=(al+be)/2;pme=rdis {Cos[alme],Sin[alme]}+cendis;
	 If[Sqrt[pme.pme]>1,pas=al;al=be;be=pas];
	If[al>be,al=al-2Pi];
	 p=Circle[cendis,rdis,{al,be}]
   ];Show[Graphics[p],DisplayFunction->Identity]]*)
   
GrHDrecta[{ad_,bd_},{cd_,dd_}]:=Module[{a,b,c,d,r},
		 If[ad==1. && bd==0.,{c,d}=InCayley[{cd,dd}];{a,b}={c,d+1},
             If[cd==1. && dd==0. ,{a,b}=InCayley[{ad,bd}];{c,d}={a,b+1},
                      {c,d}=InCayley[{cd,dd}];{a,b}=InCayley[{ad,bd}]]];
		If[a!=c,r=Sqrt[b^2+(a+(a^2+b^2-c^2-d^2)/(2 (-a+c)))^2];
			r=ParametricPlot[Evaluate[Cayley[{r Cos[t]-
					(a^2+b^2-c^2-d^2)/(2 (-a+c)),r Sin[t]}]],{t,0,\[Pi]},
					DisplayFunction->Identity],
			r=ParametricPlot[Evaluate[Cayley[{a,t}]],
					{t,0.0000000001,300},DisplayFunction->Identity]];r]		   
	   		   
					
GrHDsegmento[{ad_,bd_},{cd_,dd_}]:=Module[{a,b,c,alpha,
			bet,d,r,rr,pas},{a,b}=InCayley[{ad,bd}];
		{c,d}=InCayley[{cd,dd}];
		If[a!=c,r=Sqrt[(b^2+(a+(a^2+b^2-c^2-d^2)/(2 (-a+c)))^2)];
			alpha=ArcTan[b/(a+(a^2+b^2-c^2-d^2)/(2 (-a+c)))];
			bet=ArcTan[d/(c+(a^2+b^2-c^2-d^2)/(2 (-a+c)))];
			If[alpha<0,alpha=alpha+Pi];If[bet<0,bet=bet+Pi];
			If[alpha>bet,pas=alpha;alpha=bet;bet=pas];
			rr=ParametricPlot[Evaluate[Cayley[{r Cos[t]-
					(a^2+b^2-c^2-d^2)/(2 (-a+c)),r Sin[t]}]],{t,alpha,bet},
					DisplayFunction->Identity,PlotPoints->30],
			rr=ParametricPlot[Evaluate[Cayley[{a,t}]],
					{t,d,b},DisplayFunction->Identity,
					PlotPoints->30]];rr]

GrHDtraslacion[{ad_,bd_},{cd_,dd_}]:=
	Module[{hm1,hm2,m,a,b,c,d},
		{a,b}=InCayley[{ad,bd}];{c,d}=InCayley[{cd,dd}];
		If[a!=c&&b!=d,m={(b c+a d)/(b+d),
		Sqrt[1/(b+d)^2(b d (a^2+b^2-2 a c+c^2+2 b d+d^2))]}];
		If[b==d,m={(a+c)/2,1/2 Sqrt[a^2+2 b^2-2 a c+c^2+2 d^2.]}];
		If[a==c,m={a,Sqrt[b d]}];
		Show[{GrHDmediatriz[Cayley[{a,b}],Cayley[m]],
				GrHDmediatriz[Cayley[m],Cayley[{c,d}]]},
			DisplayFunction->Identity]]
			
GrHiperciclo[a_,b_,{c_,d_}]:=
Module[{pp,e,r,al,be,g},pp=Hiperciclo[a,b,{c,d}];
        If[b!=Infinity,e=pp[[2]];r=pp[[3]];al=pp[[4]];be=pp[[5]];
        g=Circle[e,r,{al,be}],
        If[c!=a,g=Line[{{a,0.},{2c,d(2c-a)/(c-a)}}],
           g=Line[{{a,0.},{a,2d}}]]];
          Show[Graphics[g],DisplayFunction->Identity]]

GrHmediatriz[{a_,b_},{c_,d_}]:=Module[{g},
		Which[b==d,g=Line[{{(a+c)/2,0},{(a+c)/2,7}}],
			a==c,g=Circle[{a,0},Sqrt[(b d)],{0,Pi}],True,
			g=Circle[{-(b c-a d)/(-b+d),0},
			Sqrt[((b d (a^2+b^2-2 a c+c^2-2 b d+d^2))/(-b+d)^2)],{0,Pi}]];
		Show[Graphics[g],AspectRatio->Automatic,
			DisplayFunction->Identity]]

GrHorociclo1[{a_,b_},p_]:=If[p!=Infinity,Show[Graphics[
     Circle[{p,Horociclo1[{a,b},p][[2]]},
            Horociclo1[{a,b},p][[2]]]],DisplayFunction->Identity],
            Show[Graphics[Line[{{a-3,b},{a+3,b}}]],
     DisplayFunction->Identity]];

GrHorociclo2[{a_,b_},{c_,d_}]:=
Show[Graphics[{Circle[
            Table[Horociclo2[{a,b},{c,d}][[1,i]],{i,1,2}],
            Horociclo2[{a,b},{c,d}][[1,2]]],
				If[b==d,Line[{{a-1,b},{c+1,d}}],
            Circle[Table[
                Horociclo2[{a,b},{c,d}][[2,i]],{i,1,2}],
					Horociclo2[{a,b},{c,d}][[2,2]]]]}],
					DisplayFunction->Identity];

GrHperp[{a_,b_},{c_,d_}]:=Module[{k,r},{k,r}=Hperp[{a,b},{c,d}];
		Show[GrHrecta[{a,b},{k+r,0}],DisplayFunction->Identity]];

GrHrecta[{a_,b_},{c_,d_}]:=Module[{g},
		If[a!=c,g=Circle[{-(a^2+b^2-c^2-d^2)/(2(-a+c)),0},
					Sqrt[(b^2+(a+(a^2+b^2-c^2-d^2)/(2 (-a+c)))^2)],{0,Pi}],
			g=Line[{{a,0},{a,Max[{b,d}]+3}}]];Show[Graphics[g],
			AspectRatio->Automatic,DisplayFunction->Identity]]
			
GrHtraslacion[{a_,b_},{c_,d_}]:=Module[{hm1,hm2,m},
		If[a!=c&&b!=d,m={(b c+a d)/(b+d),
		Sqrt[1/(b+d)^2(b d (a^2+b^2-2 a c+c^2+2 b d+d^2))]}];
		If[b==d,m={(a+c)/2,1/2 Sqrt[a^2+2 b^2-2 a c+c^2+2 d^2.]}];
		If[a==c,m={a,Sqrt[b d]}];Show[GrHmediatriz[{a,b},m],
			GrHmediatriz[m,{c,d}],
			AspectRatio->Automatic,PlotRange->All,DisplayFunction->Identity]]
			
GrHsegmento[{a_,b_},{c_,d_}]:=Module[{alpha,
			bet,r,rr,pas},
		If[a!=c,r=Sqrt[(b^2+(a+(a^2+b^2-c^2-d^2)/(2 (-a+c)))^2)];
			alpha=ArcTan[b/(a+(a^2+b^2-c^2-d^2)/(2 (-a+c)))];
			bet=ArcTan[d/(c+(a^2+b^2-c^2-d^2)/(2 (-a+c)))];
			If[alpha<0,alpha=alpha+Pi];If[bet<0,bet=bet+Pi];
			If[alpha>bet,pas=alpha;alpha=bet;bet=pas];
			rr=ParametricPlot[Evaluate[{r Cos[t]-
					(a^2+b^2-c^2-d^2)/(2 (-a+c)),r Sin[t]}],{t,alpha,bet},
					DisplayFunction->Identity,PlotPoints->30],
			rr=ParametricPlot[Evaluate[{a,t}],
					{t,d,b},DisplayFunction->Identity,
					PlotPoints->30]];rr]
					
					
Hcirc[{a_,b_},dis_]:=Module[{p,r,cen,pb,pc},
		pb=Htrasrec[{a,b},{a+1,b},dis];
		pc=Htrasrec[{a,b},{a,b+1},dis];
		cen={a,(pb[[2]]^2-pc[[2]]^2+(a-
        pb[[1]])^2)/(2 (pb[[2]]-pc[[2]]))};
		r=pc[[2]]-cen[[2]];
        p=("x"-cen[[1]])^2+("y"-cen[[2]])^2==r^2;
		{cen,r,p}]

HDcirc[{a_,b_},dis_]:=
	Module[{p,r,cen,pc,a1,pa,pap,d1,pbd,pcd},
		{a1,b1}=InCayley[{a,b}];
		pbp=Htrasrec[{a1,b1},{a1+1,b1},dis];
		pcp=Htrasrec[{a1,b1},{a1,b1+1},dis];
		pap=Htrasrec[{a1,b1},{a1,b1+1},-dis];
		pc=Cayley[pcp];pb=Cayley[pbp];pa=Cayley[pap];
		cen={x,y}/.Solve[{(y-1/2 (pb[[2]]+
		pc[[2]])) (pc[[2]]-pb[[2]])==-(pc[[1]]-
        pb[[1]]) (x-1/2 (pb[[1]]+pc[[1]])),
		(y-1/2 (pa[[2]]+pc[[2]])) (pc[[2]]-
        pa[[2]])==-(pc[[1]]-pa[[1]]) (x-1/2 (pa[[1]]+
        pc[[1]]))}][[1]];
		r=Sqrt[(pb[[1]]-cen[[1]])^2+(pb[[2]]-cen[[2]])^2];
		p=("x"-cen[[1]])^2+("y"-cen[[2]])^2==r^2;{cen,r,p}]


HDdist[{a_,b_},{c_,d_}]:=Hdist[InCayley[{a,b}],InCayley[{c,d}]]

HDgiro[{a_,b_},alpha_,{c_,d_}]:=
	Module[{p,a1,b1,c1,d1,r,pgp,pg},
		{a1,b1}=InCayley[{a,b}];
		{c1,d1}=InCayley[{c,d}];
		pgp=Hgiro[{a1,b1},alpha,{c1,d1}];
		pg=Cayley[pgp];r=Sqrt[(c-a)^2+(d-b)^2];p=pg;p]
		
HDhiperciclo[{a_,b_},{c_,d_},{e_,f_}]:=
  Module[{cen,r,al,be,p,q,sal,pas,alme,pme},		
    If[(c-a)(f-b)!=(e-a)(d-b),cen={x,y}/.Solve[{(y-1/2 (d+f)) (f-d)==
       -(e-c) (x-1/2 (c+e)),
		(y-1/2 (b+f)) (f-b)==-(e-a) (x-1/2 (a+e))}][[1]];
		r=Sqrt[(c-cen[[1]])^2+(d-cen[[2]])^2];
		If[a==0,If[b>0,al=Pi/2//N,al=-Pi/2//N],al=ArcTan[b/a]]; 
    If[a<0 ,al=al+Pi//N];
		If[a>0 && b<0,al=al+2Pi//N];
			If[c==0,If[d>0,be=Pi/2//N,be=-Pi/2//N],	be=ArcTan[d/c]]; 
    If[c<0 ,be=be+Pi//N];
		If[c>0 && d<0,be=be+2Pi//N];If[al<be,p={a,b};q={c,d},
		   p={c,d};q={a,b}];
		   If[(q[[1]]-cen[[1]])==0,If[(q[[2]]-cen[[2]])>0,al=Pi/2//N,
		      al=-Pi/2//N],	
      al=ArcTan[(q[[2]]-cen[[2]])/(q[[1]]-cen[[1]])]]; 
    If[(q[[1]]-cen[[1]])<0 ,al=al+Pi//N];
		If[(q[[1]]-cen[[1]])>0 && (q[[2]]-cen[[2]])<0,al=al+2Pi//N];
	If[(p[[1]]-cen[[1]])==0,If[(p[[2]]-cen[[2]])>0,al=Pi/2//N,
	    al=-Pi/2//N],
      be=ArcTan[(p[[2]]-cen[[2]])/(p[[1]]-cen[[1]])]]; 
    If[(p[[1]]-cen[[1]])<0 ,be=be+Pi//N];
		If[(p[[1]]-cen[[1]])>0 && (p[[2]]-cen[[2]])<0,be=be+2Pi//N];
		If[al>be,al=al-2Pi];
		alme=(al+be)/2;pme={r Cos[alme],r Sin[alme]}+cen;
		If[Sqrt[pme.pme]>1,pas=al;al=be;be=pas];If[al>be,al=al-2Pi];
		sal={cen,r,al,be},sal={{c,d},0.,0.,0.}]]


HDhorociclo1[{a_,b_},{p_,q_}]:=
  Module[{pp,qq,rr,r,x,y,cen,rd,ec},
    If[{p,q}!={1.,0.},pp=InCayley[{p,q}][[1]];qq=InCayley[{a,b}];
      r=Horociclo1[qq,pp][[2]];rr=Cayley[{pp+r,r}],
			rr=Cayley[InCayley[{a,b}]+{1.,0.}]];
			cen={x,y}/.Solve[{(y-1/2 (q+rr[[2]])) (rr[[2]]-q)==
			-(rr[[1]]-p) (x-1/2 (p+rr[[1]])),
			(y-1/2 (b+rr[[2]])) (rr[[2]]-b)==
			-(rr[[1]]-a) (x-1/2 (a+rr[[1]]))}][[1]];
		rd=Sqrt[(p-cen[[1]])^2+(q-cen[[2]])^2];
		ec=("x"-cen[[1]])^2+("y"-cen[[2]])^2==rd^2;{cen,rd,ec}]

HDhorociclo2[{a_,b_},{c_,d_}]:=
  Module[{pp,qq,hor,aa,bb,cen1,rd1,cen2,rd2},pp=InCayley[{a,b}];
    qq=InCayley[{c,d}];hor=Horociclo2[pp,qq];If[hor[[2,2]]==0,
			aa=Cayley[{hor[[1,1]],hor[[1,2]]}+{hor[[1,2]],0.}];
			bb=Cayley[pp+{1.,0.}],
      aa=Cayley[{hor[[1,1]]+hor[[1,2]],hor[[1,2]]}];
      bb=Cayley[{hor[[2,1]]+hor[[2,2]],hor[[2,2]]}]];
			cen1={x,y}/.Solve[{(y-1/2 (d+aa[[2]])) (aa[[2]]-d)==
			-(aa[[1]]-c) (x-1/2 (c+aa[[1]])),
			(y-1/2 (b+aa[[2]])) (aa[[2]]-b)==
			-(aa[[1]]-a) (x-1/2 (a+aa[[1]]))}][[1]];
		rd1=Sqrt[(c-cen1[[1]])^2+(d-cen1[[2]])^2];
		ec1=("x"-cen1[[1]])^2+("y"-cen1[[2]])^2==rd1^2;	
    cen2={x,y}/.Solve[{(y-1/2 (d+bb[[2]])) (bb[[2]]-d)==
		-(bb[[1]]-c) (x-1/2 (c+bb[[1]])),
		(y-1/2 (b+bb[[2]])) (bb[[2]]-b)==
		-(bb[[1]]-a) (x-1/2 (a+bb[[1]]))}][[1]];
		rd2=Sqrt[(c-cen2[[1]])^2+(d-cen2[[2]])^2];
		ec2=("x"-cen2[[1]])^2+("y"-cen2[[2]])^2==rd2^2;
		{{cen1,rd1,ec1},{cen2,rd2,ec2}}]
		
Hdist[{a_,b_},{c_,d_}]:=Module[{k,al,be,dis},
		If[a==c,dis=Log[d/b],k=-(a^2+b^2-c^2-d^2)/(2 (-a+c));
			r=Sqrt[(c-k)^2+d^2];be=ArcCos[(c-k)/r];
			al=ArcCos[(a-k)/r];dis=Log[Tan[be/2]/Tan[al/2]]];dis]
			
HDmediatriz[{ad_,bd_},{cd_,dd_}]:=
	Module[{a,b,c,d,p,r},{a,b}=InCayley[{ad,bd}];
		{c,d}=InCayley[{cd,dd}];
		Which[b==d,p=HDrecta[Cayley[{(a+c)/2,1}],
					Cayley[{(a+c)/2,2}]],a==c,
			p=HDrecta[Cayley[{a-Sqrt[(b d)],0}],
					Cayley[{a+Sqrt[(b d)],0}]],True,
			r=Sqrt[((b d (a^2+b^2-2 a c+c^2-2 b d+d^2))/(-b+d)^2)];
			p=HDrecta[Cayley[{-(b c-a d)/(-b+d)-r,0}],
					Cayley[{-(b c-a d)/(-b+d)+r,0}]]];p]
					
HDperp[{a_,b_},{c_,d_}]:=
  Module[{p,q,k1,r1,p1,q1},p=InCayley[{a,b}];
    q=InCayley[{c,d}];{k1,r1}=Hperp[p,q];p1=Cayley[{k1-r1,0.}];
    q1=Cayley[{k1+r1,0.}];{p1,q1}]

HDperpComun[{a_,b_},{c_,d_},{e_,f_},{g_,h_}]:=
  Module[{p1,q1,p2,q2,k,r,p,q},p1=InCayley[{a,b}];q1=InCayley[{c,d}];
		p2=InCayley[{e,f}];q2=InCayley[{g,h}];
		{k,r }=HperpComun[p1,q1,p2,q2];
    p=Cayley[{k-r,0.}];q=Cayley[{k+r,0.}];{p,q}]


HDrecta[{ad_,bd_},{cd_,dd_}]:=
	Module[{a,b,c,d,p1,p2,p3,p4,p,r,e,f,g,pas},p1={ad,bd};p2={cd,dd};
		If[{cd,dd}=={1.,0.},p1={cd,dd};p2={ad,bd}];
		{c,d}=InCayley[p2];
		If[p1!={1.,0.},{a,b}=InCayley[p1],{a,b}={c,d+1.}];
		If[a!=c,
			r=Sqrt[(b^2+(a+(a^2+b^2-c^2-d^2)/(2 (-a+c)))^2)];
			p3=Cayley[{-(a^2+b^2-c^2-d^2)/(2 (-a+c))+r,0}];
			
			If[((a^2+b^2-c^2-d^2)/(2 (-a+c)))^2+1==r^2,p4={0.,0.};
				
				If[r==0,p=Print["x==",0],
          p=("y"(p3[[1]]-p4[[1]])==(p3[[2]]-p4[[2]]) ("x"-p4[[1]])+
                   p4[[2]] (p3[[1]]-p4[[1]]))],
                   
				p4=Cayley[{-(a^2+b^2-c^2-d^2)/(2 (-a+c)),r}];
				{e,f,g}=
          LinearSolve[{{p1[[1]],p1[[2]],1},{p2[[1]],p2[[2]],
                1},{p4[[1]],p4[[2]],1}},{-p1[[1]]^2-
                p1[[2]]^2,-p2[[1]]^2-p2[[2]]^2,-p4[[1]]^2-
                p4[[2]]^2}];
				p=Chop[("x"+e/2)^2+("y"+f/2)^2==-g+(e/2)^2+(f/2)^2]],
				
			If[a!=0.,
				p3={1.,0.};{e,f,g}=
          LinearSolve[{{p1[[1]],p1[[2]],1.},{p2[[1]],
                p2[[2]],1.},{p3[[1]],p3[[2]],1.}},
				{-p1[[1]]^2-p1[[2]]^2,-p2[[1]]^2-
                p2[[2]]^2,-p3[[1]]^2-p3[[2]]^2}];
				p=Chop[("x"+e/2)^2+("y"+f/2)^2==-g+(e/2)^2+(f/2)^2],
				p=Print["y==",0]]
				
			];Chop[p]]
				
HDreflexion[{e_,f_},{a_,b_},{c_,d_}]:=
	Cayley[Hreflexion[InCayley[{e,f}],InCayley[{a,b}],
			InCayley[{c,d}]]];

HDtraslacion[{ad_,bd_},{cd_,dd_}]:=
	Module[{hm1,hm2,m,a,b,c,d},{a,b}=InCayley[{ad,bd}];
		{c,d}=InCayley[{cd,dd}];
		If[a!=c&&b!=d,m={(b c+a d)/(b+d),
		   Sqrt[1/(b+d)^2(b d (a^2+b^2-2 a c+c^2+2 b d+d^2))]}];
		If[b==d,m={(a+c)/2,1/2 Sqrt[a^2+2 b^2-2 a c+c^2+2 d^2.]}];
		If[a==c,m={a,Sqrt[b d]}];
		hm1=HDmediatriz[Cayley[{a,b}],Cayley[m]];
		hm2=HDmediatriz[Cayley[m],Cayley[{c,d}]];
		{Print["rectas de h-reflexion en el disco:"];Print[hm1];
			Print[hm2]};]

HDtrasrec[{a_,b_},{c_,d_},dis_]:=
    Cayley[Htrasrec[InCayley[{a,b}],InCayley[{c,d}],dis]]
			
Hgiro[{a_,b_},al_,{c_,d_}]:=
	Module[{k,r,t,t1,k1,r1,p1,t2,k2,r2,p2},
		If[a!=c,
			k=-(a^2+b^2-c^2-d^2)/(2(-a+c));r=Sqrt[(c-k)^2+d^2];
			t=ArcTan[(k-a)/b],t=N[Pi/2]];
		If[t<0,t=t+N[Pi]];
		t1=t+al/4.;
		If[t1>N[Pi],t1=t1-N[Pi]];
		If[N[t1]!=N[Pi/2],k1=b Tan[t1]+a;r1=Sqrt[(a-k1)^2+b^2],
			k1=a;r1=0.];
		t2=t1+al/2.;
		If[t2>N[Pi],t2=t2-N[Pi]];
		If[N[t2]!=N[Pi/2],k2=b Tan[t2]+a;r2=Sqrt[(a-k2)^2+b^2],
			k2=a;r2=0.];
		If[r1!=0,p1=Hreflexion[{c,d},{a,b},{k1-r1,0.}],
			p1=Hreflexion[{c,d},{a,b},{a,0.}]];
 	If[r2!=0,p2=Hreflexion[p1,{a,b},{k2-r2,0.}],
			p2=Hreflexion[p1,{a,b},{a,0.}]];
			p2]

Hiperciclo[a_,b_,{c_,d_}]:=
  Module[{al,be,ga,e,r,ech,pas},If[b!=Infinity,
         If[((a-c)(d-c)+d^2)/(2d)>0,
			e={(a+b)/2,((a-c)(b-c)+d^2)/(2d)};
			r=Sqrt[((a-c)^2+d^2)((b-c)^2+d^2)]/(2d);
        ga=ArcTan[(d(b-a))/((a-c)(b-c)+d^2)];
			al=ga-Pi/2;be=3Pi/2-ga,
			e={(a+b)/2,((a-c)(b-c)+d^2)/(2d)};
			r=Sqrt[((a-c)^2+d^2)((b-c)^2+d^2)]/(2d);
        al=ArcTan[-((a-c)(b-c)+d^2)/(d(b-a))];
			be=Pi-al];
ech=(("x"-e[[1]])^2+("y"-e[[2]])^2==r^2),
      If[c!=a,ech=(0.+"y"==d/(c-a)("x"-a)),ech=(0.+"x"==a)];e=0.;r=0.;
      al=be=0];{ech,e,r,al,be}]

Hmediatriz[{a_,b_},{c_,d_}]:=Module[{p},
		Which[b==d,p=Print["x==",(a+c)/2],a==c,p=("x"-a)^2+"y"^2==b d,
			True,
			p=("x"+(b c-a d)/(-b+d))^2+
            "y"^2==(b d (a^2+b^2-2 a c+c^2-2 b d+d^2))/(-b+d)^2];
		p]
												
Horociclo1[{a_,b_},p_]:=Module[{e,ecp},
     If[p!=Infinity,e=(a^2+b^2+p^2-2a p)/(2 b),e=0];
     If[e!=0,ecp={p,e,("x"-p)^2+("y"-e)^2==e^2}];If[e!=0,ecp,Print["y==",b]]]

Horociclo2[{a_,b_},{c_,d_}]:=Module[{p,sol,ch1,ch2,pp},
     sol=Solve[{(c-a)x+(d-b)y-(c^2-a^2)/2-(d^2-b^2)/2==0,
       x^2-2a x+a^2-2b y+b^2==0},{x,y}];
    If[Dimensions[sol][[1]]==2,ch1={x,y}/.sol[[1]];ch2={x,y}/.sol[[2]];  
			pp={Horociclo1[{a,b},ch1[[1]]],Horociclo1[{a,b},ch2[[1]]]},
         ch1={x,y}/.sol[[1]];
      pp={Horociclo1[{a,b},ch1[[1]]],{0.,0.,"y"+0.==b}}];pp]

Hperp[{a_,b_},{c_,d_}]:=Module[{k,r,k1,r1,t,t1},
		If[a!=c,k=-(a^2+b^2-c^2-d^2)/(2 (-a+c));r=Sqrt[(c-k)^2+d^2];
		     	t=ArcTan[(k-a)/b],t=Pi/2];If[t<0,t=t+Pi];
		        t1=t+Pi/2;
		If[N[t1]!=N[Pi/2],k1=b Tan[t1]+a;
		     	r1=Sqrt[(a-k1)^2+b^2],k1=a;r1=0];{k1,r1}]
		     	
HperpComun[{a_,b_},{c_,d_},{e_,f_},{g_,h_}]:=
  Module[{k,r,k1,k2,r1,r2},k1=-(a^2+b^2-c^2-d^2)/(2(-a+c));
    r1=Sqrt [(a-k1)^2+b^2];k2=-(e^2+f^2-g^2-h^2)/(2(-e+g));
    r2=Sqrt [(e-k2)^2+f^2];
    k=(k2^2-r2^2-k1^2+r1^2)/(2k2-2k1);r=Sqrt[(k-k1)^2-r1^2];{k,r}]

Hrecta[{a_,b_},{c_,d_}]:=Module[{p},If[a!=c,
			p=Chop[("x"+(a^2+b^2-c^2-d^2)/(2(-a+c)))^2+"y"^2==
			b^2+(a+(a^2+b^2-c^2-d^2)/(2(-a+c)))^2],p=Print["x==",a]];p]

Hreflexion[{e_,f_},{a_,b_},{c_,d_}]:=
	Module[{p,xx,yy,cen,rr},If[a!=c,
			cen=-(a^2+b^2-c^2-d^2)/(2 (-a+c));
      rr=b^2+(a+(a^2+b^2-c^2-d^2)/(2 (-a+c)))^2;
			xx=Sqrt[((e-cen)^2+f^2)];yy=rr/xx;p=1/xx(yy {e-cen,f})+
					{cen,0},p={2 a-e,f}];p]
         
Htraslacion[{a_,b_},{c_,d_}]:=
	Module[{hm1,hm2,m},If[a!=c&&b!=d,m={(b c+a d)/(b+d),
					Sqrt[1/(b+d)^2(b d (a^2+b^2-2 a c+c^2+2 b d+d^2))]}];
		If[b==d,m={(a+c)/2,1/2 Sqrt[a^2+2 b^2-2 a c+c^2+2 d^2.]}];
		If[a==c,m={a,Sqrt[b d]}];hm1=Hmediatriz[{a,b},m];
		hm2=Hmediatriz[m,{c,d}];
		{Print["rectas de h-reflexi\[OAcute]n:"];Print[hm1];Print[hm2]};
		]

Htrasrec[{a_,b_},{c_,d_},dis_]:=
	Module[{al,be,p,r,k},If[a==c,p={a,b E^dis},
			k=-(a^2+b^2-c^2-d^2)/(2 (-a+c));r=Sqrt[(c-k)^2+d^2];
			al=ArcCos[(a-k)/r];be=2 ArcTan[E^dis Tan[al/2]];
			p={r Cos[be]+k,r Sin[be]}];p]
			

InCayley[{a_,b_}]:={-2b/((a-1)^2+b^2),(1-a^2-b^2)/((a-1)^2+b^2)}
        
End[]

EndPackage[ ]

Null


















































