Poincare Disk Segment Construction

Use the checkboxes to view the steps in the construction

Given: Points A and B interior to the Poincare Disk.
Construct: the hyperbolic segment with endpoints A and B.

(Show/Hide) 1. Let A' be the inverse point of A relative to γ,
                       using the construction given previously.  
(Show/Hide) 2. Let β be the circle passing through the three
                       points A, A', and B.
(Show/Hide) 3. Let r be the arc of circle β joining A and B
                       inside γ.
                       
Arc r is the Poincare segment joining A and B.

A = (-0.45800617846953373, -0.4645405733573242)
B = (0.31156331850015223, -0.6016915728172681)
A' = PDiskInversePoint(A)
β = Circle(A, A', B)
a = false
b = false
r = PDiskSegment(A, B)
c = false

Tool: PDisk Inverse Point (command PDiskInversePoint)
Input: A
Output: A'

a = Ray(Center[Circle[(0, 0), (1, 0)]], A)
b = OrthogonalLine(A, a)
B, C = Intersect(Circle[(0, 0), (1, 0)], b)
c = Segment(Center[Circle[(0, 0), (1, 0)]], B)
d = OrthogonalLine(B, c)
A' = Intersect(a, d)

Tool: PDisk Ray (command PDiskRay)
Input: B, A
Output: e, G

A' = PDiskInversePoint(A)
d = CircumcircleArc(B, A, A')
E, F = Intersect(d, Circle[(0, 0), (1, 0)])
G = If(E ≟ E, E, F)
e = CircumcircleArc(B, A, G)

Tool: PDisk Line (command PDiskLine)
Input: A, B
Output: g, G, H

A' = PDiskInversePoint(A)
d = CircumcircleArc(B, A, A')
E, F = Intersect(d, Circle[(0, 0), (1, 0)])
G = If(E ≟ E, E, F)
f, H = PDiskRay(A, B)
g = CircumcircleArc(G, A, H)

Tool: PDisk Segment (command PDiskSegment)
Input: A, B
Output: h

a = Ray(Center[Circle[(0, 0), (1, 0)]], A)
b = OrthogonalLine(A, a)
C, D = Intersect(Circle[(0, 0), (1, 0)], b)
c = Segment(Center[Circle[(0, 0), (1, 0)]], C)
d = OrthogonalLine(C, c)
E = Intersect(d, a)
e = Circle(E, A, B)
F = Center(e)
f = Segment(A, B)
G = Midpoint(f)
g = Ray(F, G)
H = Intersect(e, g)
h = CircumcircleArc(A, H, B)

Tool: PDisk Distance (command PDiskDistance)
Input: A, B
Output: f, text1

a = Ray(Center[Circle[(0, 0), (1, 0)]], A)
b = OrthogonalLine(A, a)
C, D = Intersect(Circle[(0, 0), (1, 0)], b)
c = Segment(Center[Circle[(0, 0), (1, 0)]], C)
d = OrthogonalLine(C, c)
E = Intersect(d, a)
e = Circle(E, A, B)
F, G = Intersect(e, Circle[(0, 0), (1, 0)])
f: abs(log(Distance[A, F] / Distance[A, G] / (Distance[B, F] / Distance[B, G])))
H = Center(e)
I = Midpoint(A, B)
g = Ray(H, I)
J = Intersect(e, g)
text1: Name[A] + (Name[B]) + "=" + f

Tool: PDisk Angle Measure (command PDiskAngleMeasure)
Input: A, C, B
Output: text1, β

c, D = PDiskRay(C, A)
d, E = PDiskRay(C, B)
F = Center(c)
G = Center(d)
a = Segment(F, C)
b = Segment(G, C)
e = OrthogonalLine(C, a)
f = OrthogonalLine(C, b)
g = OrthogonalLine(A, e)
h = OrthogonalLine(B, f)
A' = Intersect(e, g)
B' = Intersect(f, h)
α = Angle(A', C, B')
β = Angle(Min[α, 360° - α])
text1: "∡" + (Name[A]) + (Name[C]) + (Name[B]) + "=" + β
k = Circle(C, (0.5 * Distance[A, C]))
i = AngularBisector(A', C, B')
j = OrthogonalLine(A', i)
H = Intersect(i, j)
l = Ray(C, H)
I = Intersect(k, l)

Tool: PDisk Raise Perpendicular (command PDiskRaisePerpendicular)
Input: A, B
Output: f

c, C, D = PDiskLine(A, B)
E = Center(c)
a = Segment(E, B)
b = OrthogonalLine(B, a)
F = PDiskInversePoint(B)
d = LineBisector(B, F)
G = Intersect(b, d)
e = Circle(G, B)
H, I = Intersect(e, Circle[(0, 0), (1, 0)])
f = CircumcircleArc(H, B, I)

Tool: PDisk Drop Perpendicular (command PDiskDropPerpendicular)
Input: A, B, C
Output: e, H

A' = Mirror(A, Circle[(0, 0), (1, 0)])
c = Circle(A', A, B)
C' = Mirror(C, Circle[(0, 0), (1, 0)])
C'_1 = Mirror(C, c)
d = Circle(C'_1, C, C')
D, E = Intersect(d, Circle[(0, 0), (1, 0)])
F, G = Intersect(d, c)
g = Segment(Center[Circle[(0, 0), (1, 0)]], G)
G' = Intersect(Circle[(0, 0), (1, 0)], g)
H = If(G' ≟ G', F, G)
e = CircumcircleArc(D, C, E)

Tool: PDisk Angle Bisector (command PDiskAngleBisector)
Input: A, B, C
Output: r

c, D = PDiskRay(B, A)
d, E = PDiskRay(B, C)
F = Center(c)
G = Center(d)
a = Segment(F, B)
b = Segment(G, B)
e = OrthogonalLine(B, a)
f = OrthogonalLine(B, b)
g = OrthogonalLine(A, e)
h = OrthogonalLine(C, f)
A' = Intersect(e, g)
C' = Intersect(f, h)
i = AngularBisector(A', B, C')
j = OrthogonalLine(B, i)
k = Ray(Center[Circle[(0, 0), (1, 0)]], B)
l = OrthogonalLine(B, k)
H, I = Intersect(Circle[(0, 0), (1, 0)], l)
m = Segment(Center[Circle[(0, 0), (1, 0)]], H)
n = OrthogonalLine(H, m)
B' = Intersect(n, k)
p = LineBisector(B', B)
J = Intersect(j, p)
q = Circle(J, B)
K, L = Intersect(q, Circle[(0, 0), (1, 0)])
r = CircumcircleArc(L, B, K)

Tool: PDisk Midpoint (command PDiskMidpoint)
Input: A, B
Output: M

c = PDiskRaisePerpendicular(A, B)
d = PDiskRaisePerpendicular(B, A)
A' = Mirror(A, c)
B' = Mirror(B, d)
a = Ray(Center[Circle[(0, 0), (1, 0)]], A)
b = LineBisector(B', B)
C_1 = Intersect(b, a)
e = Ray(Center[Circle[(0, 0), (1, 0)]], B)
f = LineBisector(A, A')
C_2 = Intersect(f, e)
g = Circle(C_1, B')
h = Circle(C_2, A)
C, D = Intersect(g, h)
k, E, F = PDiskLine(C, D)
p, G, H = PDiskLine(A, B)
K = Center(k)
L = Center(p)
q = Circle(K, D)
r = Circle(L, B)
I, J = Intersect(q, r)
M = If(abs(I)  <  1, I, J)

Tool: PDisk Perpendicular Bisector (command PDiskPerpendicularBisector)
Input: A, B
Output: k, M

c = PDiskRaisePerpendicular(A, B)
d = PDiskRaisePerpendicular(B, A)
A' = Mirror(A, c)
B' = Mirror(B, d)
a = Ray(Center[Circle[(0, 0), (1, 0)]], A)
b = LineBisector(B', B)
C_1 = Intersect(b, a)
e = Ray(Center[Circle[(0, 0), (1, 0)]], B)
f = LineBisector(A, A')
C_2 = Intersect(f, e)
g = Circle(C_1, B')
h = Circle(C_2, A)
C, D = Intersect(g, h)
k, E, F = PDiskLine(C, D)
p, G, H = PDiskLine(A, B)
K = Center(k)
L = Center(p)
q = Circle(K, D)
r = Circle(L, B)
I, J = Intersect(q, r)
M = If(abs(I)  <  1, I, J)

Tool: PDisk Point Reflection (command PDiskPointReflection)
Input: A, M
Output: A'

d = PDiskRaisePerpendicular(A, M)
A' = Mirror(A, d)

Tool: PDisk Circle Center And Point (command PDiskCircleCenterAndPoint)
Input: O, P
Output: c

P' = PDiskPointReflection(P, O)
a = LineBisector(P', P)
b = Ray(Center[Circle[(0, 0), (1, 0)]], O)
A = Intersect(b, a)
c = Circle(A, P)

Tool: PDisk Circle Center And Radius (command PDiskCircleCenterAndRadius)
Input: O, A, B
Output: e

l, C = PDiskPerpendicularBisector(O, A)
D = Center(l)
a = Line(D, B)
c = Circle(D, C)
E, F = Intersect(c, a)
G = If(abs(F)  <  1, F, E)
d, M = PDiskDropPerpendicular(G, C, B)
H = PDiskPointReflection(B, M)
e = PDiskCircleCenterAndPoint(O, H)