Trois cercles égaux
Author: Patrice Debart

C = (0, 8)
B = (18, -4)
A = (-2, -4)
AB = Segment(A, B)
d_1 = AngularBisector(B, A, C)
d_2 = AngularBisector(A, B, C)
I = Intersect(d_1, d_2)
dAB = Line(A, B)
I_1 = Mirror(I, dAB)
H_2 = Midpoint(I, I_1)
R' = Length(Vector[Vector[I, H_2]])
c = Circle(A, B, C)
O = Center(c)
R = Length(Vector[Vector[O, A]])
r: 1.0 / (1.0 / R + 1.0 / R')
T = Dilate(O, r / R, I)
T' = Mirror(T, d_1)
L = Midpoint(T, T')
cTT' = Circle(L, T)
dTT' = Line(T, T')
K = Intersect(AB, dTT')
tg, tg2 = Tangent(K, cTT')
M = Intersect(cTT', tg)
c5 = Circle(K, M)
H_1, H_3 = Intersect(c5, AB)
d4 = OrthogonalLine(H_1, AB)
BC = Segment(B, C)
AC = Segment(A, C)
d_3 = AngularBisector(A, C, B)
c' = Circle(I, H_2)
O_1 = Intersect(d4, d_1)
p1 = Line(O_1, AC)
p2 = Line(O_1, AB)
O_2 = Intersect(d_2, p2)
O_3 = Intersect(d_3, p1)
c_3 = Circle(O_3, r)
c_2 = Circle(O_2, r)
c_1 = Circle(O_1, r)
IO = Segment(I, O)
d'_1 = Ray(A, I)
O1O2 = Segment(O_1, O_2)
O1O3 = Segment(O_1, O_3)
O2O3 = Segment(O_3, O_2)
BI = Segment(B, I)
CI = Segment(C, I)
H1O1 = Segment(H_1, O_1)
IH_2 = Segment(I, H_2)